responseXML funktioniert nicht

vocaris2000

Grünschnabel
Hallo,

ich versuche gerade eine Seite mit AJAX zu designen. Beim letzten mal (mit ASP.Net) hat auch alles super funktioniert. Diesmal habe ich jedoch serverseitig php und irgendwie will es nicht. Also erstmal ein wenig Quellcode:
Code:
// Request erzeugen
function getRequest() {
  var ajaxHandler = false;
  
  // Handler für IE erzeugen
  try {
      ajaxHandler = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (ex) {}
  
  // Wenn nicht erzeugt, dann für andere Browser erzeugen
  if (!ajaxHandler) {
      try {
          ajaxHandler = new XMLHttpRequest();
      } catch (ex) {}
  }
  
  // Handler zurückgeben
  return ajaxHandler;
}

ajaxHandler = getRequest();

function loadData() {
  var url = "webservice.php";
  var params = "func=locations";

  ajaxHandler.open('POST', url, true);
  ajaxHandler.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  ajaxHandler.onreadystatechange = callBack;
  ajaxHandler.send(params);
}

function callBack() {
	switch (ajaxHandler.readyState) {
  	case 4:
		if (ajaxHandler.status != 200) {
			alert("Der Request wurde abgeschlossen ist aber nicht OK\nFehler:" + ajaxHandler.status); 
		} else {
    alert(ajaxHandler.responseText);
    

try {
      var data = ajaxHandler.responseXML;
      alert(data);
      var header = data.documentElement;
      alert(header);
} catch (e) {
  alert('Error:\n'+e.message);
}
		}
  	    break;
  	default:
  	    break;
    }
}

loadData();

Der XML-String der von meiner PHP-Seite generiert wird ist der folgende:
<?xml version="1.0" encoding="uft-8"?><mapdata><header><requestid>1</requestid><num_rows>1</num_rows></header><body><location x="100" y="100">Location 1</location></body></mapdata>

Die Zeile "alert(ajaxHandler.responseText);" gibt mir auch genau diesen XML-String aus. Aber bereits der "alert(data);" gibt mir Firefox einen null - im IE [object]. Die Zeile danach verursacht im Firefox die Fehlermeldung "data has no properties" im IE wird hier kein Fehler erzeugt, statt dessen gibt der "alert(header);" einen null aus.

Für mich sieht es so aus, als wenn der responseXML "ins leere läuft" - aber wieso? Kann mir irgendjemand helfen?

Gruß
vocaris2000
 
Hi,

bei mir funktioniert der Code, wenn ein korrektes XML-Dokument ausgeliefert wird.

Beispiel:
Code:
<?php
  header('Content-type: text/xml', true);
  echo("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
?>
<mapdata>
  <header>
    <requestid>1</requestid>
    <num_rows>1</num_rows>
  </header>
  <body>
    <location x="100" y="100">Location 1</location>
  </body>
</mapdata>
Ciao
Quaese
 
Hallo,

hmm, dann denke ich, dass mein PHP-Script die Rückgabe nicht richtig macht. Du bist hingegangen und gibts nur den XML-Header per echo aus - den Rest hast du einfach drunterstehen. Bei mir generiere ich ein paar Variablen mit den entsprechenden Werten und mache dann einen echo mit dem gesamten XML-Dokument:
PHP:
echo  '<?xml version="1.0" encoding="utf-8"?>'
    . '<mapdata>'
      . '<header>'
        . '<requestid>' . $requestid . '</requestid>'
        . '<num_rows>' . $num_rows . '</num_rows>'
      . '</header>'
      . '<body>'
        . $ret
      . '</body>'
    . '</mapdata>';
Wie müsste ich denn meinen echo umbauen damit es funktioniert?

Gruß
Vocaris
 

Neue Beiträge

Zurück