Como posso detectar uma solicitação AJAX dentro do Drupal?

18

Estou procurando a maneira Drupal de detectar a solicitação AJAX. Preciso verificar isso dentro de hook_form_alter (incorporando visualizações com suporte AJAX)

Códio
fonte
Isso pode ajudar: drupal.stackexchange.com/questions/86939/…
shasi kanth

Respostas:

28

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();
Clive
fonte
Estou tentando verificar se a solicitação vem do botão de upload de imagens. 'HTTP_X_REQUESTED_WITH' não existe na matriz $ server. Alguma ideia?
Mouneer
horas economizadas !! muito apreciado !!
JayKandari
Obrigado, @Clive!
aserww106 18/07
9

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;
}
shasi kanth
fonte
3
Pode funcionar 95%, mas parece que isso não é garantido. Em primeiro lugar, não é apenas a convenção que a string 'ajax' faz parte do caminho para solicitações de ajax? Qualquer módulo contrib pode registrar qualquer caminho que escolher. Em segundo lugar, um caminho não-ajax não poderia conter a string 'ajax'? Por exemplo, poderia definir o caminho para uma página de exibição ou painéis como 'myajaxpage'?
31415 AdamS
0

Como não existe um método à prova de balas para verificar a solicitação AJAX (como HTTP_X_REQUESTED_WITHpode 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?

kenorb
fonte
Eu acho que no caso de arquivo / ajax e mídia / ajax, provavelmente haverá parâmetros extras na URL, portanto o ajax não estará no final. Exemplo: / file / ajax / field_user_picture / und / 0 / form-XXXXXXXXXXXXXXXXXXXXXXXXXXXX
AdamS
0

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;
Kirill Roskolii
fonte
0

Como eu fiz isso foi usando:

$request = $_SERVER['REQUEST_URI']

Lá eu detectei o? _Wrapper_format = drupal_ajax

Stef Van Looveren
fonte