11
(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.

Fiddle

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.

+0

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 –

+0

@MehdiYeganeh jQuery setzt es auf '$ .noop' ​​welche in einer leeren Funktion. http://api.jquery.com/jQuery.noop/ – Johan

+0

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 –

Antwort

1

Wir hatten ähnliches Problem mit jquery fehlgeschlagen auf IE8. Ich nehme an, dass Sie eine Cross-Domain-Anfrage stellen. Jquery ajax durch die XMLHttpRequest, aber IE8 hat XMLHttpRequest -Objekt mit XDomainRequest ersetzt und jquery-Leute unterstützen es nicht. So für IE8 müssen Sie den Code ändern, um XDomainRequest mit jquery zu verwenden.

siehe Links

Using jquery ajax for IE8

+0

Danke aber jQuery sollte das jetzt intern behandeln. Außerdem wird 'XMLHttpRequest' bis auf IE7 unterstützt. – Johan

+1

Auch, wie ich oben erwähnt habe; Ich bin nicht auf der Suche nach einer jQuery-Lösung. Ich benutze GWT. Ich habe gerade jQuery für Demonstrationszwecke verwendet. – Johan

+0

jquery wird nicht intern damit umgehen. Sie haben nicht vor, IE8 zu unterstützen, siehe diesen Fehlerbericht -> http://bugs.jquery.com/ticket/8283 – cherit