Як я можу виявити запит AJAX всередині Drupal?


Відповіді:


28

Для Drupal 7 немає нічого особливого в API, просто використовуйте звичайний PHP:

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  // AJAX request
}

Для Drupal 8 об’єкт запиту Symfony має допоміжний метод:

// Example for brevity only, inject the request_stack service and call 
// getCurrentRequest() on it to get the request object if possible.
$request = \Drupal::request();
$is_ajax = $request->isXmlHttpRequest();

Я намагаюся перевірити, чи запит надходить із кнопки завантаження зображення. 'HTTP_X_REQUESTED_WITH' не існує в масиві $ server. Будь-які ідеї?
Mouneer

заощаджені години !! цінується !!
JayKandari

Дякую, @Clive!
aserww106

9

Ви можете розглянути можливість використання current_path () у своєму гачку, щоб перевірити, чи шлях містить у ньому слово "ajax".

Наприклад:

$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
    echo 'AJAX request detected!';
    exit;
}

3
Може працювати 95%, але, схоже, це не гарантується. По-перше, чи не є лише умовою, що рядок "ajax" є частиною шляху для запитів ajax? Будь-який модуль-внесок може зареєструвати будь-який обраний ним шлях. По-друге, чи не могло статися, що не-ajax шлях містить рядок "ajax"? Наприклад, чи можна встановити шлях для сторінки перегляду чи панелей до "myajaxpage"?
AdamS

0

Оскільки немає способу перевірки запиту AJAX (як HTTP_X_REQUESTED_WITHце можна підробляти), немає ще однієї альтернативи, заснованої на URL:

if (end((arg())) == 'ajax') {
  // AJAX request
}

Працює для переглядів (у випадку, коли останній елемент URI містить слово "ajax").

Дивіться також: Як перевірити, чи запит є запитом AJAX з PHP?


Я думаю, що у випадку файлу / ajax та media / ajax, ймовірно, будуть додаткові параметри URL-адреси, тому ajax не буде в кінці. Напр. / Файл / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

Запит AJAX в рамках роботи з формами в Drupal означатиме, що форму потрібно переробити. Щоб виявити, що форма має бути відновлена, слід перевірити:

$form_state['rebuild'] == TRUE;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.