Wie kann ich eine AJAX-Anfrage in Drupal erkennen?
18
Ich suche nach einer Drupal-Methode zur Erkennung von AJAX-Anfragen. Ich muss dies in hook_form_alter überprüfen (Ansichten mit AJAX-Unterstützung einbetten)
Für Drupal 8 verfügt das Symfony-Anforderungsobjekt über eine Hilfsmethode:
// 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();
Ich versuche zu überprüfen, ob die Anfrage vom Bild-Upload-Button kommt. 'HTTP_X_REQUESTED_WITH' existiert nicht im $ server Array. Irgendwelche Ideen?
Mouneer
Stunden gespart !! sehr geschätzt !!
JayKandari
Vielen Dank, @Clive!
Aserww106
9
Sie können current_path () in Ihrem Hook verwenden, um zu überprüfen, ob der Pfad das Wort 'ajax' enthält.
Könnte zu 95% funktionieren, aber dies scheint nicht garantiert zu sein. Erstens ist es nicht nur eine Konvention, dass der String 'ajax' Teil des Pfades für Ajax-Anfragen ist? Jedes Contrib-Modul kann einen beliebigen Pfad registrieren. Könnte zweitens ein Nicht-Ajax-Pfad nicht die Zeichenfolge 'Ajax' enthalten? Könnte zB der Pfad für eine Ansichts- oder Panelseite auf 'myajaxpage' gesetzt werden?
AdamS
0
Da es keine kugelsichere Methode zum Überprüfen von AJAX-Anforderungen gibt (wie HTTP_X_REQUESTED_WITHgefälscht werden kann), gibt es hier eine andere Alternative, die auf der URL basiert:
if(end((arg()))=='ajax'){// AJAX request}
Funktioniert für Ansichten (falls das letzte URI-Element ein Ajax-Wort enthält).
Ich denke, im Fall von Datei / Ajax und Medien / Ajax gibt es wahrscheinlich zusätzliche Parameter in der URL, so dass Ajax nicht am Ende sein wird. ZB / file / ajax / field_user_picture / und / 0 / form-
XXXXXXXXXXXXXXXXXXXXXXXX
0
Eine Ajax-Anfrage im Rahmen der Arbeit mit Formularen in Drupal würde bedeuten, dass das Formular neu erstellt werden muss. Um zu erkennen, dass das Formular neu erstellt werden muss, sollte Folgendes überprüft werden:
Antworten:
Für Drupal 7 gibt es nichts Besonderes in der API, verwenden Sie einfach einfaches PHP:
Für Drupal 8 verfügt das Symfony-Anforderungsobjekt über eine Hilfsmethode:
quelle
Sie können current_path () in Ihrem Hook verwenden, um zu überprüfen, ob der Pfad das Wort 'ajax' enthält.
Ex:
quelle
Da es keine kugelsichere Methode zum Überprüfen von AJAX-Anforderungen gibt (wie
HTTP_X_REQUESTED_WITH
gefälscht werden kann), gibt es hier eine andere Alternative, die auf der URL basiert:Funktioniert für Ansichten (falls das letzte URI-Element ein Ajax-Wort enthält).
Siehe auch: Wie überprüfe ich, ob es sich bei der Anfrage um eine AJAX-Anfrage mit PHP handelt?
quelle
Eine Ajax-Anfrage im Rahmen der Arbeit mit Formularen in Drupal würde bedeuten, dass das Formular neu erstellt werden muss. Um zu erkennen, dass das Formular neu erstellt werden muss, sollte Folgendes überprüft werden:
quelle
Wie ich es gemacht habe, war mit:
Dort habe ich das? _Wrapper_format = drupal_ajax entdeckt
quelle