Wie kann ich eine AJAX-Anfrage in Drupal erkennen?


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

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

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?


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;

0

Wie ich es gemacht habe, war mit:

$request = $_SERVER['REQUEST_URI']

Dort habe ich das? _Wrapper_format = drupal_ajax entdeckt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.