Montag, 8. August 2011

IE 9, Ajax, Error c00c023f

Bei Ajax-Anwendungen, kann es in unregelmäßigen Abständen zu komischen Fehlermeldungen kommen. Error c00c023f. Ziemlich doof, da dann wichtige Funktionen einfach abgebrochen werden.

Der Grund ist wohl ein Bug im IE9 bei der Behandlung von XMLHttpRequest(). Der IE9 nutzt nämlich erstmalig XMLHttpRequest(), statt seiner ActiveX-Objekte.

Die meisten Ajax Skripte haben - damit es auf allen Browsern läuft - immer beide Möglichkeiten unterstützt und meistens XMLHttpRequest() zu erst abgefragt.

Um den Fehler im IE9 also zu vermeiden reicht es, die if und else Zweige zu vertauschen und erst nach dem ActiveX Objekt zu fragen. Denn der IE9 kann diese natürlich auch noch benutzen.

Wie folgt sieht das dann aus:

if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
else if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html; charset=iso-8859-1');
// zu dieser Zeile siehe weiter unten
}
}