Odpowiedzi:
W Drupal 7 nie ma nic specjalnego w API, wystarczy użyć zwykłego PHP:
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// AJAX request
}
W przypadku Drupala 8 obiekt żądania Symfony ma metodę pomocniczą:
// 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();
Możesz rozważyć użycie metody current_path () w haku, aby sprawdzić, czy ścieżka zawiera słowo „ajax”.
Dawny:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
Ponieważ nie ma kuloodpornej metody sprawdzania żądania AJAX (co HTTP_X_REQUESTED_WITH
można sfałszować), oto inna alternatywa oparta na adresie URL:
if (end((arg())) == 'ajax') {
// AJAX request
}
Działa dla widoków (w przypadku, gdy ostatni element URI zawiera słowo „ajax”).
Zobacz także: Jak sprawdzić, czy żądanie jest żądaniem AJAX w PHP?
Żądanie AJAX w zakresie pracy z formularzami w Drupal oznaczałoby, że formularz musi zostać odbudowany. Aby wykryć, że formularz musi zostać odbudowany, należy sprawdzić:
$form_state['rebuild'] == TRUE;
Jak to zrobiłem, użyłem:
$request = $_SERVER['REQUEST_URI']
Tam wykryłem? _Wrapper_format = drupal_ajax