http_request.responseXML gibt im IE ein leeres XML-Dokument zurück

harmonica

Grünschnabel
Hallo,


Ich möchte eigentlich nur eine simple xml-Datei auslesen über AJAX.
Das gelingt mir soweit auch nur im Internet Explorer kommt ein leeren XML-Dokument an.
Dabei gehe ich wie folgt vor:

Ich rufe mit einer Funtkion die Request-Methode auf:
Code:
function dbGetFormPlanData(pid)
{
	makeRequest("AJAX/getPlanData.php","fillFormPlanData","plan_id="+pid);
}

in der Requestmethode hole ich mir das http-Request-objekt, und weise dem onreadystatechange eine Methode zu die die gesendeten Daten auslesen soll.
Als Parameter poste ich nur eine Id welche im verlinkten php-Script zum auslesen eines Datensatzes benötigt wird:

Code:
function makeRequest(url,method,post) {

    http_request = false;

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

    if (!http_request) {
        alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
        return false;
    }
    //dem HTTP_Request eine methode Zuweisen die aufgerufen wird wenn der Request Abgeschlossen ist
    //addORSCMethod(method);
    http_request.onreadystatechange = fillFormPlanData;
	http_request.open('POST', url, true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send(post);

}

Die gewünschte Methode wird auch durch das http-Request aufgerufen und fordert von der Methode getXMLfromRequest das xml-Objekt an.

Code:
function fillFormPlanData()
{
	var xmldoc=getXMLfromRequest();
    
	if(xmldoc!=null)
	{
			
		var row=new Array();
		row['vonDate']=xmldoc.getElementsByTagName('vonDate').item(0).firstChild.data;
/*
....
*/

	}
}

Die Methode getXMLfromRequest liest dann die XML-Daten von dem http-Request-Objekt aus und übergibt sie. Aber schon in dieser Methode hat das XML-Objekt keine einzigen Kindknoten und ist völlig leer - im Internet Explorer. Opera und Firefox haben dies Problem nicht.

Code:
function getXMLfromRequest() {

    var xmldoc=null;
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
        	xmldoc = http_request.responseXML;
			//Nach Fehlerausgabe suchen
			var fehler=xmldoc.getElementsByTagName('fehler');
			//Wenn Fehler gefunden
			if(fehler.length > 0)
			{
				//dann ausgeben
				alert(fehler.item(0).firstChild.data);
			}
        } else {
            alert('Bei der Datenabfrage ist ein Problem aufgetreten.');
        }
    }
    return xmldoc;
}

Den größten Teil des Codes habe ich von:
http://www.w3clubs.com/mozdev/httprequest_test_xml.html

Interessant ist, dass der Code auf deren Seite funktioniert. Kopiere ich ihn aber exakt aus dem Quelltext in meine Javascript-Datei habe ich auch hiermit dasselbe Problem, dass der IE nur ein leeres XML-Dokument ausliest.
Ich bin am verzwiefeln.:suspekt:
 
Überprüfe mal, ob es geht, wenn du auch exakt die selben Header-Infos der Beispiel-Seite übernimmst.

Versuche sonst mal statt
Javascript:
http_request.responseXML

Javascript:
http_request.responseXML.xml

Hoffe, das hilft dir
Master of Chess
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Hilfe.
Leider hat alles nichts gebracht.
Die Header habe ich eins-zu-eins aus dem Quellcode kopiert.
Brachte aber auch keine Änderung. Selbst der exakt kopierte Quellcode will nicht so laufen wie er es soll.
Das von dir empfohlene responseXML.xml habe ich auch ausprobiert. Es wird aber von keinem Browser akzeptiert.
Ich habe sogar den Kopf der HTML-Datei übernommen für die Datei in der das Script gestartet wird.

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...

Trotz alledem weigert sich der IE(7) die xml-Datei auszulesen (zumindest eine sinnvoll gefüllte). Egal ob ich das Skript jetzt auf localhost oder auf dem server im netz starte.
 
Hm ja die original xml-Datei akzeptiert er.
Jetzt bin ich so weit, dass ich davon ausgehen kann, dass der IE nur Dateien mit der
Endung .xml akzeptiert.

Spreche ich die php Datei an habe ich wieder das alte Problem.
rufe ich die php-Datei aber im ie direkt auf und speichere den erzeugten xml-code in eine
xml-Datei

Code:
<?xml version="1.0" ?>
<plandata>
    <plan_id>11</plan_id>
  <vonDate>2007-07-01</vonDate>
  <vonTime>08:00:00</vonTime>
  <bisDate>2007-11-28</bisDate>
  <dauer>667</dauer>

  <wtag>7</wtag>
  <thema_id>6</thema_id>
  <titel>Nochn Thema</titel>
  <farbe>16776960</farbe>
  <beschreib>nochn Thema Themalokuiop</beschreib>
</plandata>
dann nimmt der ie(übrigens einer meiner allerliebsten Lieblingsbrowser :mad: ) das an.
Jetzt muss ich ihn nur noch dazu bringen, dass er php-Dateien auch ganz toll findet.
 
Dann sag ihm per PHP doch mit der header()-Funktion dass der Content-Type text/xml ist. Dann müsste es gehen. Also:

PHP:
header('Content-Type: text/xml');

btw: Was findest du übrigens am IE gut

Schönen Tag noch
Master of Chess
 
Zuletzt bearbeitet:
Danke, das blieb leider auch ohne Erfolg.
Ich habe in der .htaccess jetzt einfach Dateien mit der Endung .xml
als php Dateien eingetragen und die php-Datei in yyy.xml umbenannt. So nimmt der ie das an.
Code:
AddType application/x-httpd-php .php .xml
AddHandler x-httpd-php .php .xml
Ist zwar nicht der Königsweg aber funktioniert erst mal.
Wenn noch jemand eine einfachere Lösung hat, die auch mit .php-Dateien arbeitet, kann er/sie sich gerne bei mir melden.
 
Hi!
Habe das gleiche Problem mit dem verfluchtn IE...
übergebe ich dem IE eine fertige xml-Datei, so funktioniert er, wie ich es von ihm erwarte
(ich nutze für den HttpRequest die XHConn library)
Code:
myConn.connect("getPlaces.xml", "GET", "IDDistrict="+IDDistrict, fnWhenDone);

übergebe ich ihm aber von PHP generierte xml-Daten, so spielt er nicht mit
Code:
myConn.connect("getPlaces.php", "GET", "IDDistrict="+IDDistrict, fnWhenDone);

in der getPlaces.php habe ich natürlich den header auf Content-type: text/xml; gesetzt
PHP:
<?PHP header('Content-type: text/xml; charset=utf-8'); ... ?>

Die Lösung mit der .htaccess "interpretiere *.xml als *.php!" funktioniert bei mir lieder nicht... Es ist zum verzweifeln!
 
Erstmal herzlich willkommen im Forum!

Ich bin mir nicht sicher, inwieweit das standardkonform ist, aber probier doch mal

PHP:
header('Content-Type: application/xml');

Außerdem solltest du darauf achten, dass dein erzeugtes XML-Dokument mit

HTML:
<xml version="1.0" encoding="UTF-8">

beginnt.

Einen schönen Tag noch
Master of Chess
 

Neue Beiträge

Zurück