Réponses:
Pour Drupal 7, il n'y a rien de spécial dans l'API, utilisez simplement du PHP simple:
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// AJAX request
}
Pour Drupal 8, l'objet de demande Symfony a une méthode d'assistance:
// 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();
Vous pouvez envisager d'utiliser current_path () dans votre hook, pour vérifier si le chemin contient le mot «ajax».
Ex:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
Puisqu'il n'y a pas de méthode à l'épreuve des balles pour vérifier la demande AJAX (comme cela HTTP_X_REQUESTED_WITH
peut être usurpé), voici une autre alternative basée sur l'URL:
if (end((arg())) == 'ajax') {
// AJAX request
}
Fonctionne pour les vues (dans le cas où le dernier élément URI contient un mot «ajax»).
Voir aussi: Comment vérifier si la requête est une requête AJAX avec PHP?
La demande AJAX dans le cadre de l'utilisation de formulaires dans Drupal signifierait que le formulaire doit être reconstruit. Pour détecter que le formulaire doit être reconstruit, il faut vérifier:
$form_state['rebuild'] == TRUE;
Comment je l'ai fait en utilisant:
$request = $_SERVER['REQUEST_URI']
Là, j'ai détecté le? _Wrapper_format = drupal_ajax