Ich würde gerne wissen, ob es möglich ist, sich in jede einzelne AJAX-Anfrage "einzuhaken" (entweder während sie gesendet wird oder bei Ereignissen) und eine Aktion auszuführen. An dieser Stelle gehe ich davon aus, dass sich auf der Seite andere Skripte von Drittanbietern befinden. Einige davon verwenden möglicherweise jQuery, andere nicht. Ist das möglich?
javascript
ajax
xmlhttprequest
Yuliy
quelle
quelle
fetch()
API in modernen Browsern ausgeführt werden.Antworten:
Inspiriert von Avivs Antwort habe ich ein wenig nachgeforscht und mir das ausgedacht.
Ich bin mir nicht sicher, ob es gemäß den Kommentaren im Skript so nützlich ist und natürlich nur für Browser funktioniert, die ein natives XMLHttpRequest-Objekt verwenden .
Ich denke, es wird funktionieren, wenn Javascript-Bibliotheken verwendet werden, da sie wenn möglich das native Objekt verwenden.
quelle
HINWEIS: Die akzeptierte Antwort liefert nicht die tatsächliche Antwort, da sie zu früh aufgerufen wird.
Sie können dies tun , das wird allgemein abfangen jede AJAX global und nicht vermasseln jede Rückrufe usw. , die möglicherweise von Dritten AJAX - Bibliotheken zugewiesen wurden.
Weitere Dokumente, was Sie hier mit der addEventListener-API tun können, finden Sie hier:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress
(Beachten Sie, dass dies nicht funktioniert <= IE8)
quelle
this.status
Geben Sie in diesem Fall den Serverstatus zurück,200
wenn die Anforderung in Ordnung ist, 404, wenn das Element nicht gefunden wurde, 500 usw. Aber der Code funktioniert einwandfrei."load"
Veranstaltung ist nur auf Erfolg ausgerichtet. Wenn Sie sich nicht für das Ergebnis interessieren (nur dass die Abfrage beendet wurde), können Sie das"loadend"
Ereignis verwendenDa Sie jquery erwähnen, ich weiß jquery bietet eine
.ajaxSetup()
Methode , dass Sets globale Ajax - Optionen , die die Ereignisauslöser wie umfassensuccess
,error
undbeforeSend
- das ist , was so klingt , was Sie suchen.Natürlich müssten Sie die Verfügbarkeit von jQuery auf jeder Seite überprüfen, auf der Sie diese Lösung verwenden möchten.
quelle
Es gibt einen Trick, um es zu tun.
Bevor alle Skripte ausgeführt werden, nehmen Sie das ursprüngliche XHMHttpReuqest-Objekt und speichern Sie es in einer anderen Variable. Überschreiben Sie dann die ursprüngliche XMLHttpRequest und leiten Sie alle Aufrufe über Ihr eigenes Objekt an sie weiter.
Pseudocode:
quelle
Ich habe auf Github eine gute Bibliothek gefunden, die den Job gut macht. Sie müssen sie vor allen anderen JS-Dateien einfügen
https://github.com/jpillora/xhook
Hier ist ein Beispiel, das jeder eingehenden Antwort einen http-Header hinzufügt
quelle
Mit der Antwort "meouw" schlage ich vor, die folgende Lösung zu verwenden, wenn Sie die Ergebnisse der Anfrage sehen möchten
quelle
jquery ...
quelle
Zusätzlich zu der Antwort von meouw musste ich Code in einen Iframe einfügen, der XHR-Aufrufe abfängt, und die obige Antwort verwenden. Ich musste mich jedoch ändern
Zu:
Und ich musste mich ändern
Zu:
Dies war erforderlich, damit es in IE9 mit dem IE8-Dokumentmodus funktioniert . Wenn diese Änderung nicht vorgenommen wurde, funktionierten einige vom Komponentenframework (Visual WebGUI) generierte Rückrufe nicht. Weitere Infos unter diesen Links:
Ohne diese Änderungen wurden AJAX-Postbacks nicht beendet.
quelle