(function (send) {
XMLHttpRequest.prototype.send = function() {
this.addEventListener('readystatechange', function() {
console.log('readyState changed');
}, false);
send.apply(this, arguments);
};
})(XMLHttpRequest.prototype.send);
Dies funktioniert, aber es scheint andere Frameworks (wie jQuery) zu beeinflussen. Wenn ich den obigen Code benutze, werden meine jQuery-Ajax-Aufrufe nicht abgeschlossen (IE7 + IE8).AJAX readystatechange Listener für IE7 + 8
Gibt es eine Möglichkeit, dem Ereignis einen neuen Alias zu geben, so dass es keine Konflikte verursacht (ich nehme nur an, dass dies das Problem ist)?
Und ich kann this.onreadystatechange
nicht verwenden, da jQuery es überschreibt (siehe Fiddle).
Sobald ich den Ereignis-Listener binden, scheint der Code stillschweigend zu versagen, sodass ich die Konsole nicht zum Debuggen verwenden kann.
Compare in ie8 vs ie9 mode and notice that the console is empty in ie8
Der Grund, warum ich brauche ist, dass ich eine globale Ajax-Handler für einen anderen Rahmen (GWT) wollen. Ich benutze jQuery nur um es jetzt zu testen.
Bearbeiten: Sieht aus wie nur ie9 unterstützt addEventListener
. attachEvent
scheint jedoch auf dem XHR-Objekt in ie7-8 nicht zu existieren.
i'm für diese Antwort leider blenden ich versuche Problem zu finden, ich weiß nicht, warum? ... Sie XMLHttpRequest.send ersetzt und Sie sind letzte Person, die onreadystatechange ändern und niemand könnte es nach dir ändern .. !! aber wie du erklärst, nicht funktioniert .. ich ändere onload und seine wahre & arbeitete .. und ich überprüfe jquery quelle, jquery nicht onreadystatechange überschreiben und onload & onerror von XHR nur überschreiben –
@MehdiYeganeh jQuery setzt es auf '$ .noop' welche in einer leeren Funktion. http://api.jquery.com/jQuery.noop/ – Johan
yep ich gefunden Linie und gefunden Problem, das Problem ist, wenn Sie Anfrage von jquery senden, überprüfen Sie Zeitüberschreitung und setzen onreadystatechange zu noop (jquery.basis.js, Zeile 5240): setTimeout (function() { // prüfen, ob die Anforderung, um zu sehen noch geschieht if (! xhr && requestDone) { onreadystatechange ("timeout");} }, s.timeout); & wenn Sie Zeitüberschreitung auf 0 setzen youre Problem lösen in jquery: D –