AJAX streikt im IE
Thomas Niegel
- javascript
0 Micha0 Thomas Niegel0 Don P0 Thomas Niegel
0 Horst
Hi zusammen,
ich habe ein für mich nicht nachvollziehbares AJAX-Problem beim IE.
Ich möchte einfach daten dynamisch nachladen. Im Firefox funktioniert alles wunderbar. Der IE bricht die Scriptverarbeitung ab, in dem Moment in dem ich auf "xmlHttp.responseText" zugreife.
Hat jemand dafür eine Lösung?
Danke
Thomas
Mein Quellcode:
var xmlHttp = null;
function handleResponse() {
if (xmlHttp.readyState == 4) {
alert(xmlHttp.getAllResponseHeaders()); // => hier kommt das script noch an
var tpm = xmlHttp.responseText;
alert(tpm); // => hier nicht mehr.
if(document.getElementById) document.getElementById("counter_online").innerHTML = xmlHttp.responseText;
else if(document.all) counter_online.innerHTML = xmlHttp.responseText;
}
}
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// Internet Explorer 6 und lter
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = null;
}
}
}
function ReloadCounter() {
if (xmlHttp != null) {
xmlHttp.open('GET', 'counter_dhtml.php', true);
xmlHttp.onreadystatechange =handleResponse;
xmlHttp.send(null);
}
}
Hallo Thomas Niegel,
Hat jemand dafür eine Lösung?
Du könntest die fehlermeldung mal nennen. Ansonsten würde ich die Reihenfolge der Methodenaufrufe mal wie hier beschrieben drehen
if (xmlHttp != null) {
xmlHttp.open('GET', 'counter_dhtml.php', true);
xmlHttp.onreadystatechange =handleResponse;
xmlHttp.send(null);
}
in:
Mit freundlichem Gruß
Micha
Hi Micha
»Du könntest die fehlermeldung mal nennen.
Ich bekomme keine Fehlermeldung. (bzw. ich weiß nicht, wo ich die prüfen könnte)
Das Script bricht einfach Kommentarlos ab.
xmlHttp.readyState ist 4
xmlHttp.Status ist 200
egal wie ich auf xmlHttP.responseText zugreife, danch wird das Script nicht weiter ausgeführt.
Die Methodenaufrufe hab' ich auch schon geändert. Hat nix gebracht.
Hab' aber mittlerweile was interessantes rausgefunden.
Ich habe von einer anderen Seite (http://www.w3clubs.com/mozdev/httprequest_test.html) den Quellcode kopiert. Auf deren Seite funktioniert es auch im IE.
Wenn ich das ganze auf meinem Server ausführe, dann läuft wieder nur der Firefox. ?!
Liebe Grüße
Thomas
Hallo Micha,
Ich bekomme keine Fehlermeldung. (bzw. ich weiß nicht, wo ich die prüfen könnte)
Vielleicht so:
> alert(xmlHttp.getAllResponseHeaders()); // => hier kommt das script noch an.
try { // versuchen wir
> var tpm = xmlHttp.responseText; // den kritischen Zugriff
} catch(e) { // und fangen den Fehler ab.
alert('Fehler: ' + e); // -> Fehlermeldung?
}
> alert(tpm); // => hier nicht mehr.
Gruß, Don P
So bekomme ich Fehler: [object Error] angezeigt.
Falls das interessant ist, im moment liefert das Script, welches hoffentlich angesprochen wird folgendes:
<?xml version="1.0" encoding="ISO-8859-1"?><author><online>1</id></author>
zu Anfang hatte ich nur die "1" als Ergebnis. Mit dem gleichen Resultat, daß das Script abgebrochen hat.
Hallo Micha,
Ich bekomme keine Fehlermeldung. (bzw. ich weiß nicht, wo ich die prüfen könnte)
Vielleicht so:
alert(xmlHttp.getAllResponseHeaders()); // => hier kommt das script noch an.
try { // versuchen wir
var tpm = xmlHttp.responseText; // den kritischen Zugriff
} catch(e) { // und fangen den Fehler ab.
alert('Fehler: ' + e); // -> Fehlermeldung?
}alert(tpm); // => hier nicht mehr.
> Gruß, Don P
>
So bekomme ich Fehler: [object Error] angezeigt.
Falls das interessant ist, im moment liefert das Script, welches hoffentlich angesprochen wird folgendes:
<?xml version="1.0" encoding="ISO-8859-1"?><author><online>1</id></author>
Ohje, da ist ja Einiges im Argen.
<online>1</id>
das passt nicht. Wenn Du in XML einen Tag <online> aufmachst, musst Du den auch wieder schließen, entweder mit </online> oder im Tag <online> selbst: <online/>
</id>
Dieser Tag wurde nicht eröffnet.
Was Du richtig hast:
<?xml version="1.0" encoding="ISO-8859-1"?>
<author>
</author>
Viele Grüße,
Hotte
Hallo Horst,
Ich will ja nicht meckern, aber du solltest doch etwas mehr in den Threads lesen: Es ist heute das 2. mal, dass du einen Kommentar postest zu Problemen, die längst gelöst oder erkannt sind.
Thomas hat hier seine Tippfehler bereits 3 Minuten später korrigiert, und du kommst nach 5 1/2 Stunden und kommentierst ausgerechnet sein erkanntermaßen fehlerhaftes Posting.
Im anderen Thread mit den Zweierpotenzen war dein Hinweis auf die Binärdastellung von heute bereits seit 2 Tagen bekannt und diskutiert worden.
*SCNR*
Gruß, Don P
Kleiner Nachtrag:
Ich bitte die Tipp- und kopierfehler zu entschuldigen :)
Die aufgerufene Seite liefert folgendes zurück:
<?xml version="1.0" encoding="ISO-8859-1"?><author><online>1</online></author>
Hallo,
Die aufgerufene Seite liefert folgendes zurück:
<?xml version="1.0" encoding="ISO-8859-1"?><author><online>1</online></author>
Ok, das ist ja ein komplettes XML-Dokument. Evtl. kannst du mittels xmlHttp.responseXML zuzugreifen. Das liefert ein entsprechendes DOM-Objekt:
if(document.getElementById) {
document.getElementById("counter_online").innerHTML = xmlDoc.getElementsByTagName("online")[0].childNodes[0].nodeValue;
} else if(document.all) {
counter_online.innerHTML = xmlDoc.getElementsByTagName("online")[0].childNodes[0].nodeValue;
}
Denn xmlHttp.responseText ist für Text-Rohdaten gedacht. Du willst ja auch nur reinen Text empfangen, um ihn dann mit
if(document.getElementById) document.getElementById("counter_online").innerHTML = xmlHttp.responseText;
else if(document.all) counter_online.innerHTML = xmlHttp.responseText;
einzusetzen.
Also könntest du doch einfach dafür sorgen, dass dein 'counter_dhtml.php' auch wirklich nur reinen Text schickt, kein komplettes XML-Dokument. Dazu muss auch der richtige HTML-Header geschickt werden, also in 'counter_dhtml.php':
header('Content-Type: text/html; charset=iso-8859-1'); // sorgt für die korrekte Kodierung
header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0'); // wichtig für IE
Gruß, Don P
Sorry, ich hatte 'xmlDoc' ja gar nicht definiert, hier also nochmal:
var xmlDoc = xmlHttp.responseXML.documentElement;
if(document.getElementById) {
document.getElementById("counter_online").innerHTML = xmlDoc.getElementsByTagName("online")[0].childNodes[0].nodeValue;
}
Gruß, Don P
Hallo,
vermutlich liegts am Request.
Versuchts mal so (url entspr. anpassen):
function loadWords(){
var url = '/cgi-bin/words.cgi?finde='+document.getElementById('suchwort').value;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = responseHandler;
req.open("GET", url, true);
req.send(null);
}
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = responseHandler;
req.open("GET", url, true);
req.send();
}
}
}
Viele Grüße,
Hotte