AJAX: XMLHttpRequest und XML-Response
25.04.2006 on 11:37 | In Computer & IT | No CommentsSeid ein paar Tagen experimentiere nun auch ich mit AJAX herum. Das funktioniert soweit auch ganz prima. MAn erzeugt sich in JavaScript einfach ein XMLHttpRequest-Objekt und setzte eine Anfrage an ein Serverseitiges Skript ab:
reqObj = new XMLHttpRequest();
reqObj.open('get', 'ajax.php?action=getdata', true);
reqObj.onreadystatechange = responseHandle;
reqObj.send(null);
Mit einer Funktion, welche als Referenz an reqObj.onreadystatechange übergeben wird verarbeitet man dann die Antwort des Servers und kann diese dann z.B. via DOM in das aktuelle HTML einbauen:
function responseHandle() {
if (4 == reqObj.readyState) { // prüft ob alle Dtaenb übertragen wurden (4 == COMPLETED)
resp = reqObj.responseText;
//..
}
}
Das funktioniert so auch einwandfrei. Allerdings kann man sich vom Server auch XML-Daten senden lassen und diese sich dann von XMLHttpRequest-Object als DOM-Node zurückgeben lassen. Was ja bei größeren Datenmengen auch sinn macht, da man den internen DOM-Parser und die DOM-API benutzen kann:
function responseHandle() {
if (4 == reqObj.readyState) { // prüft ob alle Dtaenb übertragen wurden (4 == COMPLETED)
resp = reqObj.responseXML;
//.. Zugriff via DOM auf den XML-Node resp
}
}
Allerdings war bei mir resp immer null. Bis ich jetzt nach einem Tag suchen und lesen festgestellt habe, dass einige Mozillabrowser ein Problem mit dem Mime-Type der vom Server gesendet wird haben (Mozilla Developer Center). Das Problem lässt sich einfach bei der Erzeugung des Objektes lösen, in dme man den Mime-Type überrschreibt:
http_request = new XMLHttpRequest();
http_request.overrideMimeType('text/xml');
Anmerkung: An dieser Stelle gehe ich nicht darauf ein, dass die Konstruktion eines XMLHttpRequest-Objektes, wie hier gezeigt, nur in Browsern die auf der Gecko-Engine aufbauen funktioniert. Dafür gibt es aber Zahlreiche Ressourcen im Internet die zeigen wie man sich eine generische Fabrikmethode basteln kann. U.a. in obigem Link zum SPC TEIA Lehrbuchverlag.
