Comment puis-je détecter une demande AJAX dans Drupal?


Réponses:


28

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

J'essaie de vérifier si la demande provient du bouton de téléchargement d'image. 'HTTP_X_REQUESTED_WITH' n'existe pas dans le tableau $ server. Des idées?
Mouneer

des heures gagnées !! très appréciée !!
JayKandari

Merci, @Clive!
aserww106

9

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;
}

3
Peut fonctionner à 95%, mais il semble que ce ne soit pas garanti. Premièrement, n'est-ce pas la seule convention selon laquelle la chaîne «ajax» fait partie du chemin d'accès aux requêtes ajax? N'importe quel module contrib pourrait enregistrer n'importe quel chemin qu'il choisit. Deuxièmement, un chemin non ajax ne pouvait-il pas contenir la chaîne «ajax»? Par exemple, pourrait-il définir le chemin d'une page de vue ou de panneaux sur «myajaxpage»?
AdamS

0

Puisqu'il n'y a pas de méthode à l'épreuve des balles pour vérifier la demande AJAX (comme cela HTTP_X_REQUESTED_WITHpeut ê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?


Je pense que dans le cas de file / ajax et media / ajax, il y aura probablement des paramètres supplémentaires sur l'URL, donc ajax ne sera pas à la fin. Par exemple / fichier / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS

0

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;

0

Comment je l'ai fait en utilisant:

$request = $_SERVER['REQUEST_URI']

Là, j'ai détecté le? _Wrapper_format = drupal_ajax

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.