Antworten:
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();
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;
}
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:
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?
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;
Wie ich es gemacht habe, war mit:
$request = $_SERVER['REQUEST_URI']
Dort habe ich das? _Wrapper_format = drupal_ajax entdeckt