Risposte:
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();
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;
}
Poiché non esiste un metodo a prova di proiettile per controllare la richiesta AJAX (come HTTP_X_REQUESTED_WITH
può 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?
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;
Come ho fatto stava usando:
$request = $_SERVER['REQUEST_URI']
Lì ho rilevato? _Wrapper_format = drupal_ajax