Gostaria de saber se é possível "enganchar" em cada solicitação AJAX (quando ela está para ser enviada ou em eventos) e executar uma ação. Neste ponto, estou supondo que há outros scripts de terceiros na página. Alguns deles podem usar jQuery, enquanto outros não. Isso é possível?
javascript
ajax
xmlhttprequest
Yuliy
fonte
fonte
fetch()
API mais recente agora em navegadores modernos.Respostas:
Inspirado pela resposta de aviv , eu investiguei um pouco e foi isso que eu descobri.
Não tenho certeza se é tão útil de acordo com os comentários no script e, claro , só funcionará para navegadores que usam um objeto XMLHttpRequest nativo .
Acho que funcionará se as bibliotecas javascript estiverem em uso, pois usarão o objeto nativo, se possível.
fonte
NOTA: A resposta aceita não produz a resposta real porque está sendo chamada muito cedo.
Você pode fazer isso, o que interceptará genericamente qualquer AJAX globalmente e não prejudicará nenhum retorno de chamada, etc. que possa ter sido atribuído por qualquer biblioteca AJAX de terceiros.
Mais alguns documentos do que você pode fazer aqui com a API addEventListener aqui:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Observe que isso não funciona <= IE8)
fonte
this.status
devolve o estado do servidor neste caso200
se o pedido está OK, 404 se o elemento não foi encontrado, 500, etc. Mas o código funciona perfeitamente."load"
evento só é convocado com sucesso. Se você não se importar com o resultado (apenas que a consulta acabou), você pode usar o"loadend"
eventoDesde que você mencionou jQuery, eu sei ofertas jquery um
.ajaxSetup()
método que define as opções ajax globais que incluem os gatilhos de eventos comosuccess
,error
ebeforeSend
- que é o que soa como o que você está procurando.é claro que você precisaria verificar a disponibilidade do jQuery em qualquer página em que tente usar essa solução.
fonte
Existe um truque para fazer isso.
Antes de todos os scripts serem executados, pegue o objeto XHMHttpReuqest original e salve-o em uma var. Em seguida, substitua o XMLHttpRequest original e direcione todas as chamadas para ele por meio de seu próprio objeto.
Código Psuedo:
fonte
Eu encontrei uma boa biblioteca no Github que faz um bom trabalho, você deve incluí-la antes de qualquer outro arquivo js
https://github.com/jpillora/xhook
aqui está um exemplo que adiciona um cabeçalho http a qualquer resposta recebida
fonte
Usando a resposta "meouw", sugiro usar a seguinte solução se quiser ver os resultados do pedido
fonte
jquery ...
fonte
Além da resposta de meouw, eu tive que injetar código em um iframe que intercepta chamadas XHR e usei a resposta acima. No entanto, eu tive que mudar
Para:
E eu tive que mudar
Para:
Isso foi necessário para fazê-lo funcionar no IE9 com o modo de documento do IE8 . Se essa modificação não foi feita, alguns retornos de chamada gerados pela estrutura do componente (Visual WebGUI) não funcionaram. Mais informações nestes links:
Sem essas modificações, os postbacks de AJAX não foram encerrados.
fonte