molily: JSON, Ajax und XmlHttpRequest

Beitrag lesen

Hallo,

Folgefragen beim nächsten Mal bitte im alten Thread stellen, dazu brauchst du keinen neuen Thread aufmachen.

Ist es sinnig bzw. guter Programmierstil den JSON String, den mir PHP liefert noch mal in XML zu verpacken?

Nein, das halte ich für überflüssig und ineffizient.

oder einfach nur den nackten String zurückzugeben (an den Client bzw. in das XmlHttpRequest Objekt)?

Das ist der Sinn von JSON.

Ich stelle mir die Frage deswegen, weil das objekt ja XmlHttpRequest heißt... und auch extra eine Eigenschaft hat, die den Typ XmlDocument hat. (responseXML)

Mit XMLHttpRequest kannst du alle möglichen Daten schicken und empfangen. In der Praxis wird XMLHttpRequest in den seltensten Fällen wirklich für XML-Daten verwendet. Meistens sind es HTML-Daten, responseXML wird da gar nicht benutzt. Der Name ist daher ziemlich verwirrend.

Und ich habe gelesen, dass das PHP Skript dann halt auch XML zurückgeben sollte, (auch den Mime-Type im header() entsprechend setzen und so)...

Wenn du kein XML einsetzt, brauchst du auch keinen XML-MIME-Typ - »nacktes« JSON solltest du mit dem MIME-Typ application/json senden.

Alternativ kannst du auf XMLHttpRequest verzichten, das nennt sich dann JSONP:

Wenn irgendwelche Daten vom Server bezogen werden sollen, wird
ein script-Element dynamisch erzeugt und das PHP-Script als Quelle angegeben (siehe Archiv). Dem Script übergibt man per GET einen JavaScript-Funktionsnamen.

Das Script gibt dann direkt JavaScript aus (MIME-Typ application/x-javascript), das der Browser sofort als solches ausführt. Der übergebene Funktionsname wird wieder in die Antwort geschrieben, dahinter ein Aufruf mit einem JSON-Object als Parameter. Darin stecken die angeforderten Daten:
funktion( { ... Object-Daten ... } );
Wenn die Daten beim Browser angelangt sind, wird die Callback-Funktion aufgerufen und sie bekommt die schon fertig als JavaScript-Objekt vorliegenden Daten als Parameter.

Eigentlich ist es aber Jacke wie Hose, ob man nun XMLHttpRequest oder JSONP nutzt. Vielleicht ist JSONP etwas schneller (im IE 6 kein ActiveX-Objekt nötig usw.), dafür lässt sich mit XMLHttpRequest genauer der Status der Anfrage überwachen.

Weitere Fragen zum Thema bitte möglichst als Antwort in diesem Thread.

Mathias