# JSON vs. InnerHTML?



## sicLotus (8. Jun 2011)

Hallo, 

soweit ich das verstanden habe, ist JSON eine art Dateiformat, womit man Daten zwischen Client-Server transportieren kann. Soweit so gut. Ich benötige allerdings nicht nur die einzelnen Daten, wie z.B. den Namen eines Users, sondern ich muss diesen auch mit HTML Code versehen. Das ganze soll dynamisch per Ajax geschehen, das heißt:

Ich zeige mir gerade alle User an. Ich klicke auf irgendeinen Link und möchte das jetzt nur noch die User mit dem Anfangsbuchstaben N angezeigt werden (dynamisch: ajax). Mit JSON könnte ich mir zwar die User wiedergeben, aber wenn ich das richtig sehe nicht die Form der Wiedergabe festlegen (als Tabelle oder in divs geschachtelt).

Bisher habe ich in meinem Servlet einen PrintWriter aus dem Response benutzt und in diesen einfach meinen HTML Code geschrieben, ungefähr so:

```
PrintWriter out = response.getWriter();
List<User> uList = new ArrayList<User>();
uList = getAllUsers("n"); //der Code ist jetzt natürlich vereinfacht
for(User u:uList) {
out.print("<option>"+u.getName()+"</option>"); //oder irgendwas in der art halt
}
```

Dann habe ich das einfach per innerHTML in meiner jsp an die richtige Stelle gefügt und war fertig. Würde das auch irgendwie mit JSON gehen? Wenn ja, wie? Und wäre das besser? Spielt das überhaupt eine Rolle?

Für ein paar Antworten wär ich sehr dankbar.


----------



## JimPanse (26. Jun 2011)

Hi,

ich würde es mal mit JQuery versuchen ich habe mal ein Tag gebastelt mit der JSTL + JQuery für ein Stripes-Web-Projekt (finde es aktuell aber nicht) aber hier ist ein weiteres Bsp.

Tutorial: Create Autocomplete feature with Java - JSP / jQuery | ViralPatel.net

anstatt 


```
$("#country").autocomplete("getdata.jsp");
```

kannst du natürlich auch


```
$("#country").autocomplete("<webapp-name>/<name eines Servlets definiert in der web.xml>");
```

angeben.

Grüße


----------



## JohannisderKaeufer (26. Jun 2011)

sicLotus hat gesagt.:


> Würde das auch irgendwie mit JSON gehen? Wenn ja, wie? Und wäre das besser? Spielt das überhaupt eine Rolle?



Das würde auch mit JSON gehen. Wie der Name JSON schon sagt, wird das Ergebnis in der JavaScriptObjectNotation geliefert. Also in einem Format mit dem Javascript etwas anfangen kann.

Im Gegensatz zu deiner Servlet-Lösung würde man auf der Clientseite mit JavaScript arbeiten und erst dort aus der JSON-Antwort ein HTML-Fragment zusammenbauen.

Das ganze spielt soweit eine Rolle, wie man sich an das MVC-Konzept halten möchte.
Mit dem Servlet baust du Daten und Visualisierung zusammen und schickst das zum Browser. => Wenig bis keine Trennung

Bei JSON schickst du lediglich Daten und läßt im Browser mit Javascript das Ergebnis zusammenbauen => Trennung von Daten und Visualisierung.

Angenommen du möchtest an mehreren verschiedenen Stellen auf deine Liste von Benutzern zugreifen und sie anders darstellen. Tabellenform, Divs, Dropdown etc. dann baust du jedes mal auf dem Server für jede Version ein HTML-Fragment zusammen und überträgst es zum Client.

Mit JSON bräuchtest du nur eine Version die JSON liefert. Und nun kannst du Beispielsweise E-Tags und die Cachingmöglichkeiten von Browsern nutzen. D.h. du schickst einmal JSON mit dem E-Tag "1". Der Browser macht daraus eine Table. Auf der nächsten Seite brauchst du Divs. Der Browser schickt die Anforderung an das selbe Servlet wie zuvor mit der Table und gibt noch den E-Tag "1" mit. Das Servlet stellt anhand des E-Tags fest, die Liste ist aktuell und gibt zurück das alles aktuell ist und der Browser bedient sich daraufhin aus seinem Cache. Das kann bei großen Datenmengen und vielen konkurrierenden Zugriffen einen erheblichen Geschwindigkeitsvorteil ausmachen.


----------

