Permafrost: Ajax: XML lesen ja- schreiben nein?

hallo
habe eine kleine Verständnisfrage zu Ajax: sehe ich das richtig, daß ein XMLHttpRequest eine XML Datei nur lesen kann? Wie ich das verstanden habe wird   dazu immer die Eigenschaft "GET" übergeben, und gibt dann *immer* die ganze Datei als Objektbaum (zB. req.responseXML) aus, die man dann per DOM Befehlen auswerten muss?

Ich habe eine Ajaxkurs besucht, in den Kursbeispielen ist auch ein kleiner Ajaxchat. Die Messages liegen in XML vor. Zum Anzeigen der chatmessages werden die Methoden, wie oben beschrieben, verwendet. Zum Absenden einer Chatnachricht allerdings wird ein anderer XMLHttpRequest gemacht, welcher eine PHP öffnet. Diese PHP Datei bekommt die entspr. Messages als query übergeben und führt sich dann die XML Datei zu Gemüte, um sie zu beschreiben. Dabei wird dann auch die Eigenschaft "POST" verwendet. Ein Timeout ist auf 5 sec. eingestellt, nach der die XML Datei neu gelesen wird und das ganze von vorn beginnt. Ok, strenggenommen ist es kein Chat sondern eine "Shoutbox" :)

Meine Schlussfolgerungen:
1. XML kann mit dem XMLHttpRequest direkt nur gelesen werden
2. dabei wird die *ganze* Datei direkt als Objekt übergeben
3. zum Schreiben einer XML Datei braucht man einen Workaround, wie hier im vorliegenden Fall den XMLHttpRequest mit PHP

ok und wenn sich jemand wundert, warum ich den Kursleiter nicht gleich gefragt habe, der Kurs liegt schon ein Weilchen zurück :)
danke, Gruß

  1. Hi,

    habe eine kleine Verständnisfrage zu Ajax: sehe ich das richtig, daß ein XMLHttpRequest eine XML Datei nur lesen kann? Wie ich das verstanden habe wird dazu immer die Eigenschaft "GET" übergeben, und gibt dann *immer* die ganze Datei als Objektbaum (zB. req.responseXML) aus, die man dann per DOM Befehlen auswerten muss?

    ich habe den Eindruck, dass du entweder das Konzept von AJAX gründlich missverstanden hast, oder nur einen ganz speziellen kleinen Teil der Möglichkeiten siehst.

    Zum Absenden einer Chatnachricht allerdings wird ein anderer XMLHttpRequest gemacht, welcher eine PHP öffnet. Diese PHP Datei bekommt die entspr. Messages als query übergeben und führt sich dann die XML Datei zu Gemüte, um sie zu beschreiben. Dabei wird dann auch die Eigenschaft "POST" verwendet. Ein Timeout ist auf 5 sec. eingestellt, nach der die XML Datei neu gelesen wird und das ganze von vorn beginnt. Ok, strenggenommen ist es kein Chat sondern eine "Shoutbox" :)

    Das habe ich jetzt nicht ganz verstanden.

    1. XML kann mit dem XMLHttpRequest direkt nur gelesen werden

    Nein. Mit XMLHttpRequest kannst du sowohl GET- als auch POST-Requests absetzen, und beliebige Nutzdaten mitschicken. Je nachdem, was das serverseitig adressierte Script mit den Daten macht, kann auch ein schreibender Zugriff realisiert werden.

    1. dabei wird die *ganze* Datei direkt als Objekt übergeben

    Auch das hängt ganz davon ab, wie das adressierte Script die Parameter auswertet. Es kann beliebige Informationen als Response liefern.

    1. zum Schreiben einer XML Datei braucht man einen Workaround, wie hier im vorliegenden Fall den XMLHttpRequest mit PHP

    Was heißt Workaround? Im Zusammenhang mit AJAX ist es üblich, dass der Request nicht auf eine statische Ressource, sondern auf ein serverseitiges Script zielt. Ob dieses Script Dateien liest oder schreibt oder beides, bleibt dem Programmierer überlassen.

    ok und wenn sich jemand wundert, warum ich den Kursleiter nicht gleich gefragt habe, der Kurs liegt schon ein Weilchen zurück :)

    Schade eigentlich. ;-)

    Schönes Wochenende,
     Martin

    --
    Wenn die Amerikaner eines Tages von jeder Tierart ein Pärchen nach Cape Canaveral treiben ...
    ja, DANN sollte man endlich misstrauisch werden.
  2. Hi there,

    habe eine kleine Verständnisfrage zu Ajax: sehe ich das richtig, daß ein XMLHttpRequest eine XML Datei nur lesen kann?

    Zunächst einmal hat AJAX mit XML überhaupt nichts zu tun.

    Wie ich das verstanden habe wird dazu immer die Eigenschaft "GET" übergeben, und gibt dann *immer* die ganze Datei als Objektbaum (zB. req.responseXML) aus, die man dann per DOM Befehlen auswerten muss?

    Nein. Abgesehen davon, daß Du mit einem GET-Request umfassende Daten nie zum Server transportieren könntest. Was Du von diesem Request zurückbekommst, liegt alleine am Prozess, den Du mit diesem Request am Server startest. Ich geb' zum Beispiel ab und an nur den passenden Namen zurück, wenn jemand in ein Eingabefeld eine Kundennummer oder eine Email eingibt.

    Meine Schlussfolgerungen:

    1. XML kann mit dem XMLHttpRequest direkt nur gelesen werden

    Nein, die Rückgabe in Form einer XML-Struktur ist nur dem Umstand geschuldet, daß man mit Javascript und dem DOM-Konzept XML-"Bäume" relativ leicht auswerten kann. Aber Du könntest per (kurzem) GET oder POST auch Daten in Form einer XML-Struktur übergeben, das wäre aber beliebig mühsam und würde vermutlich genau nichts bringen. "XML" ist ja nicht irgendeine andere Qualität von Daten sondern einfach nur eine Möglichkeit zu deren Strukturierung.

    1. dabei wird die *ganze* Datei direkt als Objekt übergeben

    Nein. Stell Dir einmal vor, Du machst einen Request auf das New Yorker Telefonbuch, da zerplatzt Dir nachher Dein Browser, wenn die Daten endlich angekommen sind;)

    1. zum Schreiben einer XML Datei braucht man einen Workaround, wie hier im vorliegenden Fall den XMLHttpRequest mit PHP

    Zum Schreiben einer XML-Datei braucht man erstens Daten und zweitens eine Vorstellung, wie man diese strukturieren will. PHP kann auch keinen Request absetzen, weil es schon auf dem Server ausgeführt wird.
    In der Praxis funktioniert das einfach so:

    Das Javascript, das in Deinem Browser läuft, schickt über das httprequest-Objekt einen Request an den Server. Der startet daraufhin ein Programm, daß Deine Anforderung überprüft und auszuführen versucht, bspw. eine SQL-Abfrage nach einem bestimmten Datensatz. Das Ergebnis dieser Abfrage schickt dieses Programm dann einfach an den Rechner zurück, von die Anfrage kam, wo wiederum das Javasrcript im Browser dafür zuständig ist, das Ergebnis auszuwerten. Es ist aber weder festgelegt, welches Programm am Server da läuft, (das kann, muss aber nicht PHP sein) noch in welcher Form diese Daten zurückgeschickt werden. Um das muss sich der Programmierer selbst kümmern (oder irgendein Framework verwenden, dann programmiert er halt eine Ebene höher)...

      1. dabei wird die *ganze* Datei direkt als Objekt übergeben

      Nein. Stell Dir einmal vor, Du machst einen Request auf das New Yorker Telefonbuch, da zerplatzt Dir nachher Dein Browser, wenn die Daten endlich angekommen sind;)

      O_o aber wie bekomm ich dann zB. den Namen "Münz, Stefan" angenommen er lebt in New York? wenn ich schreibe

      var eintraege = xmldoc.getElementsByTagName("Name");

      habe ich dann nicht schon 10 Mio Einträge in dem Objekt? (Objekt, Knoten, Objektknoten, Referenz wie auch immer ich lasse mich auch hier gern schlagen ^^)
      Bei SQL wäre mir die Sache sofort klar ich hätte ebent ein Script was eine DB fragen würde

      select Name,Vorname,PLZ,Telefon... from AdressenNYC where Name = "Muenz";

      und dessen Ergebnis auch keinen Browser zerschiessen würde nichtmal den geringsten. Aber XML? O_o wie kann ich denn vermeiden dieses Objekt mit 10 Mio. Einträgen zu bekommen?

      1. wie kann ich denn vermeiden dieses Objekt mit 10 Mio. Einträgen zu bekommen?

        Das DOM ist nicht zur performanten Abfrage von riesigen XML-Dokumenten geeignet, dafür wäre eher XPath geeignet. Aber XML ist prinzipiell nicht für solche Aufgaben gedacht, dafür wäre SQL schon passender.

        Warum willst du denn gerade ein so großes XML-Dokument durchsuchen und das auch noch clientseitig??

        Mathias

  3. habe eine kleine Verständnisfrage zu Ajax: sehe ich das richtig, daß ein XMLHttpRequest eine XML Datei nur lesen kann?

    Nein, das siehst du falsch. JS kann im Prinzip keine Dateien lesen, über AJAX kannst du Daten empfangen, entweder als XML oder ganz normal als Text.

    Wie ich das verstanden habe wird   dazu immer die Eigenschaft "GET" übergeben, und gibt dann *immer* die ganze Datei als Objektbaum (zB. req.responseXML) aus, die man dann per DOM Befehlen auswerten muss?

    Das ist eine Möglichkeit, aber wie gesagt keine Datei, sondern die Antwort des Servers, das kann auch eine Datei sein, aber auch die Ausgabe eines Skriptes.

    Ich habe eine Ajaxkurs besucht, in den Kursbeispielen ist auch ein kleiner Ajaxchat. Die Messages liegen in XML vor. Zum Anzeigen der chatmessages werden die Methoden, wie oben beschrieben, verwendet. Zum Absenden einer Chatnachricht allerdings wird ein anderer XMLHttpRequest gemacht, welcher eine PHP öffnet. Diese PHP Datei bekommt die entspr. Messages als query übergeben und führt sich dann die XML Datei zu Gemüte, um sie zu beschreiben.

    Die PHP Datei wird nicht geöffnet, sondern der Browser schickt über AJAX einen request an den Server, der dann die PHP Datei ausführt (oder eine beliebige andere CGI Sprache). Die Parameter übergabe erfolgt wie bei allen anderen Skripten auch, entweder über die POST oder GET Parameter.

    Dein Skript, liest dann offensichtlich eine XML Datei um diese mit den Parametern (also eine Art Template?) zu befüllen und dann an den Browser zurück zu schicken, das ist dann der response.

    Meine Schlussfolgerungen:

    1. XML kann mit dem XMLHttpRequest direkt nur gelesen werden

    es wird nichts gelesen, sondern empfangen. XML kann der Browser (mehr oder weniger) auch lesen und auswerten.

    1. dabei wird die *ganze* Datei direkt als Objekt übergeben

    Nein, es kommt ein Datenstrom im Browser an, dieser wandelt den in ein Objekt um.

    1. zum Schreiben einer XML Datei braucht man einen Workaround, wie hier im vorliegenden Fall den XMLHttpRequest mit PHP

    Das ist kein Workaround, sondern der normale Weg um mit einem Skript auf dem Server zu kommunizieren.

    Struppi.