JSON-Antwort an Javascript geht nicht

chemiker

Mitglied
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:

Java:
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
 
N

nillehammer

Gast
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

Mitglied
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:

Java:
 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.
 
N

nillehammer

Gast
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

Mitglied
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.
Code:
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 :D
 

Bär

Mitglied
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

Top Contributor
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

Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JSF Webanwendung Editor für JSON gesucht Web Tier 1
K JSON in Primefaces Table Web Tier 3
A JSON von JavaScript an Servlet Web Tier 9
B Ajax JSON Objekt verschicken Web Tier 3
I GWT + JSON + ? + MySQL Web Tier 12
G Json post Web Tier 4
T Json mit Struts 2 Web Tier 2
neonfly JSON response undefined Web Tier 5
G Javascript, Nodejs, Express Web Tier 0
R JavaScript für Java Enterprise Entwickler Web Tier 1
D JSF Einbindung von Javascript Web Tier 1
J Session Servlet - JavaScript Web Tier 6
M JSP und JavaScript Kommunikation in MVC Pattern Web Tier 1
E Kann man ein Formular in JSP auch per Tastendruck ohne Javascript-Verwendung abschicken? Web Tier 2
B JSP JavaScript SQL Update Web Tier 5
A JSF Rücksicht auf nicht eingeschaltetes JavaScript nehmen Web Tier 2
V Mittels JavaScript Methode aufrufen Web Tier 23
K JSP String[] Array nach Javascript Web Tier 4
C JSF Datenaustausch JSF zu Javascript Web Tier 12
J Facelets javascript compiler problem Web Tier 3
J JSF JavaScript Probleme zwischen Tomahawk und Tiles!? Web Tier 2
S Per JavaScript Java ansteuern - Welche Technik? Web Tier 2
F selektieren mit javascript Web Tier 9
S Jsp: javascript und javamethode aufrufen Web Tier 17
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
H <form:input > javascript Web Tier 2
M html + jquery(javascript-framework): elegantes und flexibles Formulardesign Web Tier 5
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
F Meinungsumfrage Struts / Javascript Web Tier 3
J Managed bean und javascript kommunikation (JSF 2) Web Tier 2
2 JavaScript Status erkennen? Web Tier 3
Schandro JSP soll dynamische Anzahl an Parametern einer JavaScript-Function erzeugen Web Tier 8
V Eigene JavaScript und JSF (a4j) Web Tier 3
S JavaScript-Funktion aufrufen mit a4j-support?? Web Tier 3
J JavaScript-Code aus Applet ausführen? Web Tier 4
pusteblume JavaScript mit Struts auslesen? Web Tier 3
T Ajax / Javascript Plugin für Eclipse Web Tier 1
G wert für hiddenfield per javascript setzten Web Tier 4
D Tapestry :: JavaScript - Libs import Web Tier 2
B JavaScript und JSF - Diashow Web Tier 9

Ähnliche Java Themen

Neue Themen


Oben