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)
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();
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').
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:
Respostas:
Para o Drupal 7, não há nada de especial na API, basta usar o PHP simples:
Para o Drupal 8, o objeto de solicitação do Symfony possui um método auxiliar:
fonte
Você pode considerar usar current_path () no seu gancho, para verificar se o caminho contém a palavra 'ajax'.
Ex:
fonte
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: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?
fonte
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:
fonte
Como eu fiz isso foi usando:
Lá eu detectei o? _Wrapper_format = drupal_ajax
fonte