Respostas:
Para o Drupal 7, não há nada de especial na API, basta usar o PHP simples:
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// AJAX request
}
Para o Drupal 8, o objeto de solicitação do Symfony possui um método auxiliar:
// 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();
Você pode considerar usar current_path () no seu gancho, para verificar se o caminho contém a palavra 'ajax'.
Ex:
$current_path = current_path();
if (strpos($current_path, 'ajax') !== false) {
echo 'AJAX request detected!';
exit;
}
Como não existe um método à prova de balas para verificar a solicitação AJAX (como HTTP_X_REQUESTED_WITH
pode ser falsificado), aqui está outra alternativa baseada na URL:
if (end((arg())) == 'ajax') {
// AJAX request
}
Funciona para visualizações (no caso em que o último item do URI contenha a palavra 'ajax').
Veja também: Como verificar se a solicitação é uma solicitação AJAX com PHP?
A solicitação AJAX no escopo de trabalhar com formulários no Drupal significaria que o formulário deve ser reconstruído. Para detectar esse formulário deve ser reconstruído, deve-se verificar:
$form_state['rebuild'] == TRUE;
Como eu fiz isso foi usando:
$request = $_SERVER['REQUEST_URI']
Lá eu detectei o? _Wrapper_format = drupal_ajax