In meiner Javascript-Datei für eine Seite möchte ich einige Skripte ausführen, nachdem alle XHR zurückgekehrt sind. Ich weiß, dass es ajaxStop()
für XHR-Anfragen durch jquery gibt, aber da ich Mithril verwende und es einen eigenen Wrapper um Ajax hat, kann ich ajaxStop()
nicht wirklich verwenden. Ich habe auch einige andere Lösungen versucht, wieWarten auf alle XHR auf einer Seite in JavaScript zu beenden
function isAllXhrComplete(){
window.activeAjaxCount--;
if (window.activeAjaxCount === 0){
//execute something here.
}
}
(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
this.addEventListener("load", isAllXhrComplete());
open.call(this, method, url, async, user, pass);
};
})(XMLHttpRequest.prototype.open);
(function(send) {
XMLHttpRequest.prototype.send = function (data) {
window.activeAjaxCount++;
send.call(this, data);
};
})(XMLHttpRequest.prototype.send);
Aber es scheint, dass da alle XHR Anrufe separat gebrannt werden, damit die window.activeAjaxCount
immer 1 oder 0 wäre, die Ausführung von Skripts auf jedem fertigen XHR Anfrage ausgelöst wird.
Gibt es irgendwelche guten Möglichkeiten, auf alle XHR-Anfragen zu warten?
Es ist wahrscheinlich ein Duplikat [Aufruf von Funktionen mit setTimeout()] (http://stackoverflow.com/questions/3800512/calling- Funktionen-mit-settimeout). Obwohl es sich um 'setTimeout' handelt, ist der Grund immer noch der gleiche. –
Während ein Problem ist, dass Sie 'isAllXhrComplete()' aufrufen, anstatt es zu übergeben, würde ich wirklich nicht die ursprünglichen Methoden überschreiben, um zu tun, was Sie wollen. Sie können dazu eine Funktion erstellen, die eine Gruppe von XHR-Anrufen verwaltet. –