Come posso rilevare la richiesta AJAX all'interno di Drupal?


Risposte:


28

Per Drupal 7 non c'è nulla di speciale nell'API, usa semplicemente PHP:

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  // AJAX request
}

Per Drupal 8, l'oggetto richiesta di Symfony ha un metodo helper:

// 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();

Sto cercando di verificare se la richiesta proviene dal pulsante di caricamento dell'immagine. 'HTTP_X_REQUESTED_WITH' non esiste nell'array $ server. Qualche idea?
Mouneer,

ore risparmiate !! molto apprezzato !!
JayKandari,

Grazie, @Clive!
aserww106,

9

Puoi considerare l'utilizzo di current_path () nel tuo hook, per verificare se il percorso contiene la parola 'ajax' in esso.

Ex:

$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
    echo 'AJAX request detected!';
    exit;
}

3
Potrebbe funzionare al 95% ma sembra che questo non sia garantito. Innanzitutto non è solo una convenzione che la stringa 'ajax' fa parte del percorso per le richieste ajax? Qualsiasi modulo contrib potrebbe registrare qualsiasi percorso scelga. In secondo luogo, un percorso non ajax potrebbe contenere la stringa "ajax"? Ad esempio, è possibile impostare il percorso di una vista o della pagina dei pannelli su "myajaxpage"?
AdamS

0

Poiché non esiste un metodo a prova di proiettile per controllare la richiesta AJAX (come HTTP_X_REQUESTED_WITHpuò essere falsificato), ecco un'altra alternativa basata sull'URL:

if (end((arg())) == 'ajax') {
  // AJAX request
}

Funziona per le viste (nel caso in cui l'ultimo elemento URI contenga la parola 'ajax').

Vedi anche: Come verificare se la richiesta è una richiesta AJAX con PHP?


Penso che nel caso di file / ajax e media / ajax ci siano probabilmente parametri aggiuntivi sull'URL, quindi ajax non sarà alla fine. Ad esempio / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

Una richiesta AJAX nell'ambito del lavoro con i moduli in Drupal significherebbe che il modulo deve essere ricostruito. Per rilevare che il modulo deve essere ricostruito, è necessario verificare:

$form_state['rebuild'] == TRUE;

0

Come ho fatto stava usando:

$request = $_SERVER['REQUEST_URI']

Lì ho rilevato? _Wrapper_format = drupal_ajax

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.