Jaka jest najszybsza metoda / implementacja wywołania zwrotnego Ajax?

18

Mam mapę, która ładuje znaczniki za pośrednictwem ajax na różne / liczne wydarzenia na mapie. Obecnie definiuję niestandardowe wywołanie zwrotne strony dla mojego hook_menu()elementu, który drukuje moje json / js.

Ponieważ moje wywołanie zwrotne strony nie zwraca żadnej treści, a jedynie drukuje treść, Drupal nie wyświetla pełnego szablonu, menu itp., A zatem pozwala mi zwrócić stronę tylko z moim JavaScript.

Chociaż to działa, uważam, że Drupal wciąż w pełni ładuje się, co oznacza, że ​​dodaje dużo kosztów ogólnych, które chciałbym upuścić.

Patrzyłem na wysokowydajny moduł obsługi wywołań JavaScript , który szczyci się jako „wysokowydajny moduł obsługi wywołań JavaScript” i, w skrócie, wygląda na to, że stanowi js.phpkomplement index.phpskierowany do twoich żądań i dostosowuje / limit / optymalizacja ładowania początkowego Drupal domyślnie.

Niestety projekt js nie ma jeszcze wersji D7 ( prośba o jedną tutaj ), co prowadzi nas do początku ...

Jaki jest najszybszy sposób na implementację wywołania zwrotnego Ajax w Drupal?

electblake
źródło

Odpowiedzi:

8

Definiuję niestandardowe wywołanie zwrotne strony dla mojego hook_menu()elementu, który drukuje moje json / js.

Właśnie to zaoferował Drupal 6. Struktura AJAX Drupal 7 może zrobić coś więcej. Tak, ładuje Drupala, ale daje także wiele funkcji za darmo. W skrócie możesz użyć ajax_deliver () jako metody dostarczania strony i wysyłać polecenia do przeglądarki.

... Ajax można włączyć, dodając klasy do przycisków i łączy. Dodając do linku klasę „use-ajax”, link zostanie załadowany za pomocą wywołania Ajax. Podczas korzystania z tej metody fragment odnośnika może zawierać „/ nojs /” jako część ścieżki. Kiedy środowisko Ajax wysyła żądanie, przekształci je w „/ ajax /”. Serwer jest wtedy w stanie łatwo stwierdzić, czy to żądanie zostało złożone za pośrednictwem rzeczywistego żądania Ajax, czy w stanie zdegradowanym, i odpowiednio odpowiedzieć.

Jednak jeśli chcesz ominąć framework ze względu na wydajność, nic nie stoi na przeszkodzie, aby wywoływać pliki php w twoim module bezpośrednio z javascript. Nie dostaniesz dobroci Drupala, ale będziesz także mieć pełną kontrolę nad stroną.

Jeremy French
źródło
Dzięki! Bez względu na wydajność naprawdę powinienem używać frameworka Ajax (teraz o nim wiem) b / c wszelkie ulepszenia procesu żądania strony ajax prawdopodobnie nastąpią w tym kontekście :)
electblake
2
Spójrz na przykładowe moduły, one bardzo pomogą, framework jest ukierunkowany na formularze, ale może być używany w dowolnym miejscu. Zredagowałem swoją odpowiedź trochę o klasie „use-ajax”.
Jeremy French
3
Bezpośrednie wywoływanie plików PHP jest czasami w porządku. Możesz nawet włączyć do tego pliku bootstrap.inc, a następnie wywołać api.drupal.org/api/drupal/includes--bootstrap.inc/function/… do określonego poziomu, którego potrzebujesz.
greggles,
4

Trochę późno, ale zwłaszcza jeśli używasz tego ajax wywołania zwrotnego dla odpytywania (sprawdź czy są nowe wiadomości na przykład), jest interesującą alternatywą: integracja Drupal node.js .

Zamiast odpytywania pozwala zbudować system podobny do zdarzenia, w którym użytkownicy (zwani także JS na swojej stronie) utrzymują otwarte połączenie z serwerem node.js. Jeśli coś się stanie, możesz bezpośrednio powiadomić wszystkich użytkowników za pośrednictwem node.js.

Berdir
źródło
Nigdy nie jest za późno na świetne sugestie - nigdy nawet nie pomyślałem o użyciu pliku node.js do tego typu rzeczy, ale nagle ma to sens heh, dzięki!
electblake
3

Ponieważ chcesz zaimplementować wywołanie zwrotne Ajax w Drupal , użycie modułu JS wygląda na dobry zakład. Właśnie rzuciłem okiem na kod i to w zasadzie to, co bym zasugerował (ale z dużo większą dbałością o szczegóły). Opiekun jest również jednym z najlepszych programistów Drupal.

Wygląda na to, że będziesz musiał użyć module_load_include()lub być może bardziej manualnego include 'sites/all/modules/contrib/...';podejścia, jeśli musisz użyć interfejsów API z innych modułów.

Sam problem, o którym mówisz, był ostatnio gorącym tematem. Myśl Dries z DrupalCon Chicago mówiła o tym, jak Drupal 8 potrzebuje lepszych interfejsów API do wykonywania wywołań zwrotnych i formatów wyjściowych innych niż HTML.

Adam DiCarlo
źródło
W skrócie - dalej badać JS.php i do / project / js? Zacznę składać petycje w kolejce problemów dotyczących wydania D7. Dzięki za film!
electblake,
Tak, szkoda, że ​​projekt JS nie został jeszcze przeniesiony na D7. Szkoda, że ​​tak trudno jest uzyskać lekkie żądanie strony.
Matt Collins