Какой самый быстрый метод / реализация для обратного вызова Ajax?


18

У меня есть карта, которая загружает маркеры через ajax на различных / многочисленных событиях карты. В настоящее время я определяю пользовательский обратный вызов страницы для моего hook_menu()элемента, который печатает мой json / js.

Поскольку обратный вызов моей страницы не возвращает никакого содержимого и только печатает содержимое, Drupal не отображает полный шаблон, меню и т. Д., И, таким образом, позволяет мне возвращать страницу только с моим JavaScript.

Хотя это работает, я считаю, что Drupal по-прежнему полностью загружается, что означает, что он добавляет много накладных расходов, которые я хотел бы отбросить.

Я рассматривал высокопроизводительный обработчик обратного вызова JavaScript , который может похвастаться «высокопроизводительным обработчиком обратного вызова JavaScript» и, в общем, выглядит так, как будто он предлагает js.phpкомплимент index.phpдля направления ваших запросов и настройки / limit / оптимизировать загрузку по умолчанию делает Drupal.

К сожалению, проект js еще не выпустил D7 ( петиция за него здесь ), что приводит нас к началу ...

Какой самый быстрый способ реализовать обратный вызов Ajax в Drupal?

Ответы:


8

Я определяю пользовательский обратный вызов страницы для моего hook_menu()элемента, который печатает мой JSON / JS.

Это то, что предложил Drupal 6. Платформа Drupal 7 AJAX может сделать немного больше, чем это. Да, он загружает Drupal, но он также предоставляет множество возможностей бесплатно. Короче говоря, вы можете использовать ajax_deliver () в качестве метода доставки страницы и отправлять команды в браузер.

... Ajax может быть включен путем добавления классов к кнопкам и ссылкам. При добавлении класса use-ajax к ссылке ссылка будет загружена с помощью вызова Ajax. При использовании этого метода href ссылки может содержать «/ nojs /» как часть пути. Когда Ajax Framework делает запрос, он преобразует это в '/ ajax /'. Затем сервер может легко определить, был ли этот запрос выполнен с помощью фактического запроса Ajax или в ухудшенном состоянии, и ответить соответствующим образом.

Однако, если вы хотите обойти фреймворк по соображениям производительности, ничто не помешает вам вызывать php-файлы в вашем модуле напрямую из javascript. Вы не получите ничего хорошего от Drupal, но у вас также будет полный контроль над страницей.


Благодарность! Независимо от производительности, я действительно должен использовать Ajax Framework (теперь, когда я об этом знаю), потому что любые улучшения в процессе запроса страницы ajax, скорее всего, произойдут в этом контексте :)
— electblake

2
Посмотрите на примеры модулей, они очень помогут, фреймворк ориентирован на формы, но может использоваться где угодно. Я отредактировал свой ответ немного о классе «use-ajax».
— Джереми Френч

3
Вызов PHP-файлов напрямую иногда хорошо. Вы даже можете включить в этот файл файл bootstrap.inc, а затем вызвать api.drupal.org/api/drupal/includes--bootstrap.inc/function/… до нужного вам уровня.
— greggles

4

Немного поздно, но особенно , если вы используете эту функцию обратного вызова AJAX для опроса (проверка на наличие новых сообщений, например), есть интересная альтернатива: Drupal Node.js интеграции .

Вместо опроса это позволяет вам создать систему, похожую на событие, где пользователи (также известные как JS на своей странице) поддерживают открытое соединение с вашим сервером node.js. Если что-то случится, вы можете напрямую уведомить всех пользователей через node.js.


Никогда не поздно для хороших предложений - никогда даже не думал об использовании node.js для такого рода вещей, но вдруг это имеет смысл, хе, спасибо!
— электроблейк

3

Поскольку вы хотите реализовать обратный вызов Ajax в Drupal , использование JS-модуля выглядит как хорошая ставка. Я просто быстро взглянул на код, и это в основном то, что я бы предложил (но с гораздо большим вниманием к деталям). Сопровождающий также является одним из ведущих разработчиков Drupal.

Похоже, вам придется использовать module_load_include()или, возможно, более ручной include 'sites/all/modules/contrib/...';подход, если вам нужно использовать API из других модулей.

Самая проблема, о которой вы говорите, была в последнее время горячей темой. Основной доклад Дриса из DrupalCon Chicago рассказывал о том, что Drupal 8 нуждается в улучшенных API для выполнения обратных вызовов и выходных форматов, отличных от HTML.


Итак, вкратце - продолжайте исследовать JS.php & do / project / js? Я начну ходатайствовать в очереди на выпуск D7. Спасибо за видео!
— Electblake

Да, это настоящий позор, проект JS еще не был портирован на D7. Это позор, это так трудно получить легкий запрос страницы.
— Мэтт Коллинз
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.