Je voudrais savoir s'il est possible de «se connecter» à chaque requête AJAX (soit au moment où elle est sur le point d'être envoyée, soit sur des événements) et d'effectuer une action. À ce stade, je suppose qu'il existe d'autres scripts tiers sur la page. Certains d'entre eux peuvent utiliser jQuery, tandis que d'autres ne le font pas. Est-ce possible?
104
fetch()
API maintenant dans les navigateurs modernes.Réponses:
Inspiré par la réponse d' aviv , j'ai fait une petite enquête et c'est ce que j'ai proposé.
Je ne suis pas sûr que ce soit très utile selon les commentaires du script et bien sûr ne fonctionnera que pour les navigateurs utilisant un objet XMLHttpRequest natif .
Je pense que cela fonctionnera si des bibliothèques javascript sont utilisées car elles utiliseront l'objet natif si possible.
la source
REMARQUE: La réponse acceptée ne donne pas la réponse réelle car elle est appelée trop tôt.
Vous pouvez faire ceci qui interceptera génériquement n'importe quel AJAX globalement et ne gâchera aucun callback, etc. qui ont peut-être été assignés par des bibliothèques AJAX tierces.
Quelques autres documents sur ce que vous pouvez faire ici avec l'API addEventListener ici:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Notez que cela ne fonctionne pas <= IE8)
la source
this.status
retourne l'état du serveur dans ce cas200
si la requête est OK, 404 si l'élément n'a pas été trouvé, 500, etc. Mais le code fonctionne parfaitement."load"
événement n'est appelé qu'en cas de succès. Si vous ne vous souciez pas du résultat (juste que la requête s'est terminée), vous pouvez utiliser l'"loadend"
événementPuisque vous mentionnez jquery, je sais offres jquery une
.ajaxSetup()
méthode qui définit les options globales ajax qui incluent les déclencheurs d'événements tels quesuccess
,error
etbeforeSend
- ce qui est ce qui ressemble à ce que vous recherchez.bien sûr, vous devrez vérifier la disponibilité de jQuery sur n'importe quelle page sur laquelle vous essayez d'utiliser cette solution.
la source
Il y a une astuce pour le faire.
Avant que tous les scripts ne s'exécutent, prenez l'objet XHMHttpReuqest d'origine et enregistrez-le dans une autre variable. Remplacez ensuite le XMLHttpRequest d'origine et dirigez tous les appels vers celui-ci via votre propre objet.
Code Psuedo:
la source
J'ai trouvé une bonne bibliothèque sur Github qui fait bien le travail, vous devez l'inclure avant tout autre fichier js
https://github.com/jpillora/xhook
voici un exemple qui ajoute un en-tête http à toute réponse entrante
la source
En utilisant la réponse de "meouw", je suggère d'utiliser la solution suivante si vous voulez voir les résultats de la demande
la source
jquery ...
la source
En plus de la réponse de meouw, j'ai dû injecter du code dans une iframe qui intercepte les appels XHR, et j'ai utilisé la réponse ci-dessus. Cependant, j'ai dû changer
À:
Et j'ai dû changer
À:
Cela était nécessaire pour le faire fonctionner dans IE9 avec le mode document IE8 . Si cette modification n'a pas été effectuée, certains rappels générés par le framework de composants (Visual WebGUI) ne fonctionnaient pas. Plus d'informations sur ces liens:
Sans ces modifications, les publications AJAX ne se sont pas terminées.
la source