Відповіді:
Для 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();
Ви можете розглянути можливість використання current_path () у своєму гачку, щоб перевірити, чи шлях містить у ньому слово "ajax".
Наприклад:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
Оскільки немає способу перевірки запиту AJAX (як HTTP_X_REQUESTED_WITH
це можна підробляти), немає ще однієї альтернативи, заснованої на URL:
if (end((arg())) == 'ajax') {
// AJAX request
}
Працює для переглядів (у випадку, коли останній елемент URI містить слово "ajax").
Дивіться також: Як перевірити, чи запит є запитом AJAX з PHP?
Запит AJAX в рамках роботи з формами в Drupal означатиме, що форму потрібно переробити. Щоб виявити, що форма має бути відновлена, слід перевірити:
$form_state['rebuild'] == TRUE;
Як я це зробив, використовуючи:
$request = $_SERVER['REQUEST_URI']
Там я виявив? _Wrapper_format = drupal_ajax