Який найшвидший метод / реалізація для зворотного виклику 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.