Mike: xmlHttpRequest als xml nur mit Dateiendung .xml?

Beitrag lesen

Hallo,

wieder mal eine Frage zu Ajax. Ich habe überlegt ob ich diese Frage eine andere von mir anhänge, denke aber separat, da anderer doch etwas anderer Frageninhalt. Oder soll ich ähnliche Fragen eher zusammenfassen?

Es geht diesmal im Gegensatz zu Text um XML lesen und verarbeiten. Dazu habe ich ein Script gefunden und wollte den XML-Output durch PHP generieren lassen. Geht aber nicht.

Auch ein Versuch die Ausgabe statisch als XML.html zu nutzen bringt kein Erfolg. Einzig wenn ich die Ausgabe als Datei mit der Endung .xml nutze, funktioniert alles wie gewünscht.

Ich habe 2 alerts() eingebaut um zu sehen was wirklch ankommt. responseText kommt ohne Probleme rein nur eben kein responseXML.  Nach allem was ich gelesen habe müsste es doch gehen, allenfalls ein MIME-Type Problem, doch dafür habe ich auch nochmal extra die Header im php gesetzt ohne Erfolg.

Woran liegts?

Testseite.html
  
<html>  
<head>  
<title>Verarbeitung von XML-Dateien mit Ajax</title>  
<meta charset="utf-8">  
  
<script type="text/javascript">  
  
var xmldata = null;  
    xmldata = new XMLHttpRequest();  
  
function xmlData() {  
  
    if (xmldata.readyState == 4) {  
  
alert("Als XML kommt gar nichts\r\n"+xmldata.responseXML);  
  
alert("Als Text ohne Probleme\r\n"+xmldata.responseText);  
  
        var inhalt = xmldata.responseXML;  
        var ifluss = inhalt.getElementsByTagName("Fluss").length;  
        var antwt1 = inhalt.getElementsByTagName("titel")[0].firstChild.nodeValue;  
  
        document.getElementById("ausg-01").innerHTML = antwt1;  
  
        for (var i = 0; i < ifluss; i++){  
  
            var antwt2 = inhalt.getElementsByTagName("Fluss")[i].getAttribute("Name");  
            var antwt3 = inhalt.getElementsByTagName("Fluss")[i].getAttribute("Laenge");  
  
            document.getElementById("ausg-02").innerHTML += "<li>" + antwt2 + " - " + antwt3 + "</li>";  
        }  
    }  
}  
  
window.onload = function() {  
  
    xmldata.open("GET", "xml.html", true);  
  
// xml.html, xml.php, einzig test.xml geht  
  
  
    xmldata.onreadystatechange = xmlData;  
    xmldata.send(null);  
}  
  
</script>  
</head>  
  
<body>  
<div class="ausg">  
<h1>Verarbeitung von XML-Dateien</h1>  
<h2 id="ausg-01"></h2>  
<ul id="ausg-02"></ul>  
</div>  
</body>  
</html>  

XML.php ###  // funktioniert nicht
  
<?php  
  
 header('Content-Type: text/xml');  
 header ('Cache-Control: no-cache');  
  
echo '<?xml version="1.0" encoding="utf-8" ?>  
  <Response>  
    <Antwort>  
      <titel>Die längsten Flüsse</titel>  
      <Fluesse>  
        <Fluss Name="Nil" Laenge="6.852"/>  
        <Fluss Name="Amazonas" Laenge="6.448"/>  
        <Fluss Name="Jangtsekiang" Laenge="6.380"/>  
        <Fluss Name="Mississippi" Laenge="3.778"/>  
        <Fluss Name="Jenissei" Laenge="5.540"/>  
        <Fluss Name="Ob" Laenge="3.650"/>  
        <Fluss Name="Amur" Laenge="2.824"/>  
      </Fluesse>  
    </Antwort>  
  </Response>  
  ';  
  
die();  
  
  
?>  

test.xml ### // Funktioniert
  
<?xml version="1.0" encoding="utf-8" ?>  
  <Response>  
    <Antwort>  
      <titel>Die längsten Flüsse</titel>  
      <Fluesse>  
        <Fluss Name="Nil" Laenge="6.852"/>  
        <Fluss Name="Amazonas" Laenge="6.448"/>  
        <Fluss Name="Jangtsekiang" Laenge="6.380"/>  
        <Fluss Name="Mississippi" Laenge="3.778"/>  
        <Fluss Name="Jenissei" Laenge="5.540"/>  
        <Fluss Name="Ob" Laenge="3.650"/>  
        <Fluss Name="Amur" Laenge="2.824"/>  
      </Fluesse>  
    </Antwort>  
  </Response>  

xml.html ### // Funktioniert nicht
  
<?xml version="1.0" encoding="utf-8" ?>  
  <Response>  
    <Antwort>  
      <titel>Die längsten Flüsse</titel>  
      <Fluesse>  
        <Fluss Name="Nil" Laenge="6.852"/>  
        <Fluss Name="Amazonas" Laenge="6.448"/>  
        <Fluss Name="Jangtsekiang" Laenge="6.380"/>  
        <Fluss Name="Mississippi" Laenge="3.778"/>  
        <Fluss Name="Jenissei" Laenge="5.540"/>  
        <Fluss Name="Ob" Laenge="3.650"/>  
        <Fluss Name="Amur" Laenge="2.824"/>  
      </Fluesse>  
    </Antwort>  
  </Response>