Comment puis-je détecter une demande AJAX dans Drupal?
18
Je cherche un moyen Drupal de détecter une requête AJAX. Je dois vérifier cela à l'intérieur de hook_form_alter (intégration des vues avec le support AJAX)
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».
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»).
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:
Réponses:
Pour Drupal 7, il n'y a rien de spécial dans l'API, utilisez simplement du PHP simple:
Pour Drupal 8, l'objet de demande Symfony a une méthode d'assistance:
la source
Vous pouvez envisager d'utiliser current_path () dans votre hook, pour vérifier si le chemin contient le mot «ajax».
Ex:
la source
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: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 source
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:
la source
Comment je l'ai fait en utilisant:
Là, j'ai détecté le? _Wrapper_format = drupal_ajax
la source