¿Cómo puedo detectar la solicitud AJAX dentro de Drupal?

Respuestas:

28

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();
Clive
fuente
Estoy tratando de verificar si la solicitud proviene del botón de carga de imágenes. 'HTTP_X_REQUESTED_WITH' no existe en la matriz $ server. ¿Algunas ideas?
Mouneer
horas ahorradas !! muy apreciado !!
JayKandari
Gracias, @Clive!
aserww106
9

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;
}
shasi kanth
fuente
3
Podría funcionar al 95%, pero parece que esto no está garantizado. En primer lugar, ¿no es solo una convención que la cadena 'ajax' es parte de la ruta para las solicitudes de ajax? Cualquier módulo contrib puede registrar cualquier ruta que elija. En segundo lugar, ¿no podría una ruta que no sea ajax contener la cadena 'ajax'? Por ejemplo, ¿podría establecer la ruta para una vista o página de paneles a 'myajaxpage'?
AdamS
0

Dado que no existe un método a prueba de balas para verificar la solicitud AJAX (como HTTP_X_REQUESTED_WITHse 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?

kenorb
fuente
Creo que en el caso de file / ajax y media / ajax es probable que haya parámetros adicionales en la URL, por lo que ajax no estará al final. Por ejemplo, / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS el
0

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;
Kirill Roskolii
fuente
0

Cómo lo hice estaba usando:

$request = $_SERVER['REQUEST_URI']

Allí detecté el? _Wrapper_format = drupal_ajax

Stef Van Looveren
fuente