Me gustaría saber si es posible "conectar" en cada solicitud AJAX (ya sea cuando está a punto de ser enviada o en eventos) y realizar una acción. En este punto, supongo que hay otros scripts de terceros en la página. Algunos de estos pueden usar jQuery, mientras que otros no. es posible?
javascript
ajax
xmlhttprequest
Yuliy
fuente
fuente
fetch()
API más nueva ahora en los navegadores modernos.Respuestas:
Inspirado por la respuesta de aviv , investigué un poco y esto es lo que se me ocurrió.
No estoy seguro de que sea tan útil según los comentarios en el script y, por supuesto , solo funcionará para navegadores que utilicen un objeto XMLHttpRequest nativo .
Creo que funcionará si se usan bibliotecas de JavaScript, ya que usarán el objeto nativo si es posible.
fuente
NOTA: La respuesta aceptada no da la respuesta real porque se llama demasiado pronto.
Puede hacer esto, lo que genéricamente interceptará cualquier AJAX a nivel mundial y no estropeará ninguna devolución de llamada, etc.que tal vez haya sido asignada por bibliotecas AJAX de terceros.
Algunos documentos más de lo que puede hacer aquí con la API addEventListener aquí:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Tenga en cuenta que esto no funciona <= IE8)
fuente
this.status
devuelvo el estado del servidor en este caso200
si la solicitud es correcta, 404 si no se encontró el elemento, 500, etc. Pero el código funciona perfectamente."load"
evento solo se llama al éxito. Si no le importa el resultado (solo que la consulta terminó), puede usar el"loadend"
eventoYa que mencionas jQuery, sé ofertas jquery un
.ajaxSetup()
método que establece opciones ajax globales que incluyen los activadores de eventos comosuccess
,error
ybeforeSend
- que es lo que suena como lo que busca.por supuesto, necesitará verificar la disponibilidad de jQuery en cualquier página en la que intente utilizar esta solución.
fuente
Hay un truco para hacerlo.
Antes de que se ejecuten todos los scripts, tome el objeto XHMHttpReuqest original y guárdelo en una var. Luego anule el XMLHttpRequest original y dirija todas las llamadas a él a través de su propio objeto.
Código Psuedo:
fuente
Encontré una buena biblioteca en Github que hace bien el trabajo, debes incluirla antes que cualquier otro archivo js
https://github.com/jpillora/xhook
aquí hay un ejemplo que agrega un encabezado http a cualquier respuesta entrante
fuente
Usando la respuesta de "meouw", sugiero usar la siguiente solución si desea ver los resultados de la solicitud
fuente
jquery ...
fuente
Además de la respuesta de meouw, tuve que inyectar código en un iframe que intercepta las llamadas XHR y usé la respuesta anterior. Sin embargo, tuve que cambiar
A:
Y tuve que cambiar
A:
Esto era necesario para que funcionara en IE9 con el modo de documento IE8 . Si no se realizó esta modificación, algunas devoluciones de llamada generadas por el marco de componentes (Visual WebGUI) no funcionaron. Más información en estos enlaces:
Sin estas modificaciones, las devoluciones de datos de AJAX no terminaron.
fuente