¿Cómo puedo detectar la solicitud AJAX dentro de Drupal?
18
Estoy buscando la forma de Drupal de detectar la solicitud AJAX. Necesito verificar esto dentro de hook_form_alter (incrustando vistas con soporte AJAX)
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();
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'.
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').
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:
Respuestas:
Para Drupal 7 no hay nada especial en la API, solo use PHP simple:
Para Drupal 8, el objeto de solicitud de Symfony tiene un método auxiliar:
fuente
Puede considerar usar current_path () en su gancho, para verificar si la ruta contiene la palabra 'ajax'.
Ex:
fuente
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: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?
fuente
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:
fuente
Cómo lo hice estaba usando:
Allí detecté el? _Wrapper_format = drupal_ajax
fuente