Respuestas:
Para Drupal 7 no hay nada especial en la API, solo use PHP simple:
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// AJAX request
}
Para Drupal 8, el objeto de solicitud de Symfony tiene un método auxiliar:
// 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();
Puede considerar usar current_path () en su gancho, para verificar si la ruta contiene la palabra 'ajax'.
Ex:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
Dado que no existe un método a prueba de balas para verificar la solicitud AJAX (como HTTP_X_REQUESTED_WITH
se puede suplantar), aquí hay otra alternativa basada en la URL:
if (end((arg())) == 'ajax') {
// AJAX request
}
Funciona para vistas (en caso de que el último elemento de URI contenga la palabra 'ajax').
Consulte también: ¿Cómo verificar si la solicitud es una solicitud AJAX con PHP?
La solicitud de AJAX en el ámbito de trabajo con formularios en Drupal significaría que el formulario debe reconstruirse. Para detectar que se debe reconstruir ese formulario, se debe verificar:
$form_state['rebuild'] == TRUE;
Cómo lo hice estaba usando:
$request = $_SERVER['REQUEST_URI']
Allí detecté el? _Wrapper_format = drupal_ajax