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)

Codium
quelle
Dies könnte helfen: drupal.stackexchange.com/questions/86939/…
shasi kanth

Antworten:

28

Für Drupal 7 gibt es nichts Besonderes in der API, verwenden Sie einfach einfaches PHP:

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  // AJAX request
}

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();
Clive
quelle
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.

Ex:

$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
    echo 'AJAX request detected!';
    exit;
}
shasi kanth
quelle
3
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).

Siehe auch: Wie überprüfe ich, ob es sich bei der Anfrage um eine AJAX-Anfrage mit PHP handelt?

Kenorb
quelle
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:

$form_state['rebuild'] == TRUE;
Kirill Roskolii
quelle
0

Wie ich es gemacht habe, war mit:

$request = $_SERVER['REQUEST_URI']

Dort habe ich das? _Wrapper_format = drupal_ajax entdeckt

Stef Van Looveren
quelle