Який найшвидший метод / реалізація для зворотного виклику Ajax?


18

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

Оскільки зворотний виклик моєї сторінки не повертає жодного вмісту та друкує лише вміст, Drupal не надає повний шаблон, меню тощо, і, таким чином, дозволяє мені повертати сторінку лише з моїм JavaScript.

Хоча це і працює, я вважаю, що Drupal все ще повністю завантажується, це означає, що він додає багато накладних витрат, які я хотів би скинути.

Я дивився на високоефективний обробник зворотних дзвінків JavaScript , який може похвалитися як "високоефективний обробник зворотних дзвінків JavaScript" і, коротше кажучи, виглядає так, ніби він пропонує js.phpкомплімент, index.phpщоб направити ваші запити та налаштувати / обмежити / оптимізувати завантажувальний процес, який 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 робить запит, він перетворить це в '/ ajax /'. Тоді сервер може легко визначити, чи був зроблений цей запит за допомогою фактичного запиту Ajax або в деградованому стані, і відповісти належним чином.

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


Спасибі! Незалежно від продуктивності, я дійсно повинен використовувати рамку Ajax (тепер, коли я знаю про неї) b / c, будь-які вдосконалення процесу запиту на сторінку ajax, ймовірно, відбудуться в цьому контексті :)
electblake

2
Погляньте на приклади модулів, вони дуже допоможуть, рамки спрямовані на форми, але їх можна використовувати в будь-якому місці. Я трохи відредагував свою відповідь про клас 'use-ajax'.
Джеремі Френч

3
Виклик PHP-файлів безпосередньо, іноді добре. Ви навіть можете, щоб цей файл включав bootstrap.inc, а потім викликав api.drupal.org/api/drupal/includes--bootstrap.inc/function/… до потрібного рівня, який вам потрібен.
греглів

4

Трохи пізно, але особливо , якщо ви використовуєте цю функцію зворотного виклику AJAX для опитування (перевірка на наявність нових повідомлень, наприклад), є цікава альтернатива: Drupal Node.js інтеграції .

Замість опитування він дозволяє створити подієву систему, де користувачі (на зразок JS на своїй сторінці) підтримують відкрите з'єднання з вашим сервером node.js. Якщо щось трапиться, ви можете безпосередньо повідомити всіх користувачів через node.js.


Ніколи не пізно для чудових пропозицій - ніколи навіть не думав використовувати node.js для подібних речей, але раптом має сенс хе, спасибі!
electblake

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.