Christian S.: JSON, Ajax und XmlHttpRequest

Hi,

ich würde gerne JSON für den Datenaustausch zwischen Client und Server verwenden.

Mir ist soweit fast alles klar. Die Kommunikation läuft von JavaScript über das XmlHttpRequest Objekt zu PHP und zurück. PHP erzeugt mir einen JSON String.

Die einzige Frage, die ich habe:

Ist es sinnig bzw. guter Programmierstil den JSON String, den mir PHP liefert noch mal in XML zu verpacken? oder einfach nur den nackten String zurückzugeben (an den Client bzw. in das XmlHttpRequest Objekt)?

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)

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)...

Funktionieren tut es auch ohne XML Gerüst. Aber ob das sauberer Stil ist!?!? Gibts da vielleicht auch sogar Standards?

Gruß + Dank,
Christian

  1. 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

    1. Hi,

      danke für die Antwort. Werde dann wohl auf XML verzichten.

      ist denn aber application/json also

      header("Content-Type", "application/json");

      notwendig? Ginge ja auch mit text/plain oder so... ich habe da halt nur Bedenken, ob application/json so das bekannte Datenformat ist und ob jeder Browser damit umgehen kann. text/plain wird wohl jeder kennen...

      Gruß
      Christian

      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