Ответы:
Для 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