# JSON-Antwort an Javascript geht nicht



## chemiker (30. Dez 2011)

Hi Community,

ich habe folgendes Problem:
Ich habe eine Webapplikation, die soll von Javascript aus angesteuert werden. Dort wird ein Servlet angesprochen, dass dann eine Textantwort im JSON-Format zurückgeben soll. Wenn ich das Servlet vom Browser aus anspreche bekomme ich auch fein den zu erwartenden Text.
Falls das ganze aber von Javascript aus mit nem XMLHttpRequest gemacht wird, versagt es irgendwie (no content). Wenn ich z.B. diese Adresse anspreche funktioniert mein Javascript, es hat nur mit meinem Servlet Probleme.

Hier mal mein Servlet-Code:


```
response.setContentType("application/json");
JSONObject jo = new JSONObject();  //org.json.JSONObject
jo.put("funktioniert", true);
jo.put("einText", "hui es klappt :D");
jo.write(response.getWriter()); // alternativ auch response.getWriter().write(jo.toString()); - funktioniert aber auch nicht
response.getWriter().flush();
```

Habt ihr irgendeine Idee?

Viele Grüße
chemiker


----------



## nillehammer (30. Dez 2011)

Etwas wenig Code, um genaueres zu sagen. Deswegen rate ich mal. Im Browser gibst Du die URL zum Servlet in die Adresszeile ein. Das löst einen sog. GET-Request aus. Die Ausgabe erzeugst Du in der doGet-Methode des Servlets und alles geht. JavaScript-Frameworks nutzen für das Absetzen von XMLHttpRequests meist einen POST-Request. Die doPost-Methode Deines Servlets ist nicht implementiert und liefert folglich nichts zurück. Kommt das vielleicht in etwa so bei Dir hin?


----------



## chemiker (30. Dez 2011)

Hi,

danke für die Antwort!
Leider muss ich dich enttäuschen. Weder wenn ich von Javascript GET oder POST aufrufe, es kommt beides mal nichts zurück.

Es sieht bei mir auch übrigens so aus:


```
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	this.doPost(request, response);
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
    	JSONObject jo = new JSONObject();  //org.json.JSONObject
    	jo.put("funktioniert", true);
    	jo.put("einText", "hui es klappt :D");
    	jo.write(response.getWriter()); // alternativ auch response.getWriter().write(jo.toString()); - funktioniert aber auch nicht
    	response.getWriter().flush();
}
```

An GET oder POST liegt es also nicht.


----------



## nillehammer (30. Dez 2011)

Schade. Der Code des Servlets sieht gut aus. Und mit dem Browser klappt es ja auch. Wobei der Aufruf von flush() ist eigentlich überflüssig. Das sollte der Webcontainer für Dich erledigen.

Kannst Du in den Methoden des Servlets mal die Aufrufe mitloggen oder einen Breakpoint setzen und den Aufruf bei laufendem Debugging machen? Nur um sicher zu gehen, dass der Request Deines JavaScripts auch wirlich beim doPost Deines Servlets ankommt. Könnte ja sein, dass Dein JavaScript den Request an eine ganz andere Stelle Deiner Applikation sendet.


----------



## chemiker (30. Dez 2011)

Hi,

ich habe jetzt der Anwendung gesagt, einen DB-Eintrag zu erstellen in der Funktion. Das hat geklappt.
Die Funktion wird also erfolgreich aufgerufen. Als Status kommt auch fein 200 zurück, aber eben kein Text / Inhalt.

Hier mal meine Javascript-Funktion, mit der Antworten von bspw.  ohne Probleme empfangen werden.

```
function getHttpRequest() {
    var xmlHttp = null; 
    xmlHttp = new XMLHttpRequest();  
    xmlHttp.onreadystatechange = ProcessRequest; 
    xmlHttp.open( "GET", funktionierendeURL, true ); 
    xmlHttp.send( null ); 
} 
 
function ProcessRequest()  
{ 
    if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 )  
    {
        if (xmlHttp.responseText == "") {
            document.getElementById("ergebnis").value = "Not found";
        }
        else {
            var info = eval("(" + xmlHttp.responseText + ")");
            document.getElementById("ergebnis").value = info;
        }
    } 
}
```

Sehr eigenartig. Habe ich vielleicht irgendwo im JAVA doch was vergessen? Ich glaub halt, es liegt am Servlet, dass irgendetwas nicht richtig angegeben wird.

Aber lasse mich gern eines besseren belehren


----------



## Bär (10. Jan 2012)

Hallo!

Probier das mal:

JSONObject jo = new JSONObject();  //org.json.JSONObject
jo.put("funktioniert", true);
jo.put("einText", "hui es klappt...");
response.getOutputStream().write(jo.toString().getBytes());

Das JSONObject wird in das Byte[] des Strings von JSONObject verwandelt und übertragen.

Gruß!


----------



## mvitz (10. Jan 2012)

Poste doch mal bitte, wie du den AJAX Request auslöst. Wenn du das ganze über einen Submit-Button machst, kann es sein, dass du vergisst 'false' zurückzugeben und du damit die Action des Formulars aufrufst und somit die Seite neu lädst, bevor der Request fertig ist.


----------



## chemiker (11. Jan 2012)

Danke für eure Antworten.

Es hat sich herausgestellt, dass die Abteilung, die die Requests anfragt, nicht korrekt gearbeitet hat. Dadurch haben sie meine Antwort nicht lesen können.
Am Code war an sich also gar nix falsch. Ich hab leider vergessen, das Thema als erledigt zu markieren.

Trotzdem danke für eure hilfreichen Antworten!

MfG
chemiker


----------

