POST-Request mit XMLHttpRequest enthält keine Daten.
Dominik
- javascript
Hallo,
wenn ich mittels XMLHttpRequest ein POST-Request an einen Server schicke kommen die enthaltenen Daten des Bodys nicht an.
Ich schicke den POST-Request an einen Server durch folgenden Code:
var sessionId;
/*
* Called when html-Page is completely loaded.
*/
function init(){
sessionId = 1;
sendPostRequest("initializeBrowser",null,true);
}
function sendPostRequest(method, params, timeout){
http=new XMLHttpRequest();
http.open("POST", "x", true);
http.onreadystatechange = evaluateResponse;
http.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
http.send(
sessionId+"\n"+
method+"\n"+
params!=null?params+"\n":""+
"#####");
if(timeout){
id = window.setTimeout("cancel()", 60000);
}else{
id = null;
}
}
Ich habe es auch schon mit http.send("test"); erfolglos probiert.
Der Server ist in Java geschrieben ohne JSP und Servlets. Die Verarbeitung der Anfrage funktioniert wie folgt:
InputStream reader = null;
try {
[...]
BufferedReader in = new BufferedReader(new InputStreamReader(
_socket.getInputStream()));
BufferedOutputStream out = new BufferedOutputStream(_socket
.getOutputStream());
String request = in.readLine();
[...]
if (request.startsWith("POST ")) {
// POST-Request
// Decide if it is a file upload
String line;
do {
line = in.readLine();
} while (!line.startsWith("Content-Type"));
if (line.contains("multipart/form-data")) {
[...]
} else {
// no file upload
// skip header
do {
line = in.readLine();
} while (!line.equals(""));
System.out.println("fini: skip header");
// read Content
String sessionId = in.readLine();
//#############################
System.out.println(sessionId);
//#############################
String methodname = in.readLine();
// read parameters
ArrayList<String> args = new ArrayList<String>();
line = sessionId;
// each line is a parameter
do {
args.add(line);
System.out.println(line);
line = in.readLine();
} while (!line.contains("#####"));
System.out.println(line);
callMethod(out, methodname, args.toArray(new String[0]));
}
}
}[...]
Auf der Konsole wird "fini: skip header ausgegeben". Wenn ich jedoch die erste Zeile des Bodys ausgeben lassen möchte (habe ich im Quellcode mit ##### markiert), erscheint null und danach tut sich nichts mehr, bis ein Exception geworfen wird, die einem mitteilt, dass das Timeout für den Socket eingetreten ist.
Ich habe es im Firefox 3.5 (ohne Firebug) und IE8 ausprobiert. In beiden Fällen besteht das Problem. Ich habe auch schon mal probiert weitere Header zu setzen, jedoch war auch dies ohne Erfolg.
Worin besteht mein Fehler? Falls meine Problembeschreibung unzureichend ist, bitte melden.
Gruß und Danke für die Hilfe
Dominik
Hi,
wenn ich mittels XMLHttpRequest ein POST-Request an einen Server schicke kommen die enthaltenen Daten des Bodys nicht an.
Und das vermutest du einfach, oder hast du es überprüft?
Firebug -> Request im Net-Panel anschauen.
Daraus, dass dein serverseitiges Script mit den Daten, die es ggf. bekommt, nichts anfangen kann, den Schluss zu ziehen, es bekäme überhaupt keine, wäre zwar einfach, aber wahrscheinlich einfach falsch.
http.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
http.send(
sessionId+"\n"+
method+"\n"+
params!=null?params+"\n":""+
"#####");
Das hältst du aber selbst nicht für das, was du in der Zeile darüber mit setRequestHeader behauptest, oder?
MfG ChrisB
Hi,
danke für die Antwort.
Das hältst du aber selbst nicht für das, was du in der Zeile darüber mit setRequestHeader behauptest, oder?
Habe den setRequestHeader verändert:
http.setRequestHeader("Content-Type",
"text/plain");
http.send(
sessionId+"\n"+
method+"\n"+
params!=null?params+"\n":""+
"#####");
Und das vermutest du einfach, oder hast du es überprüft?
Firebug -> Request im Net-Panel anschauen.
Firebug listet die zuvor getätigten get-Anfragen, aber keine Postanfrage auf. Wahrscheinlich weil keine Antwort vom Server geschickt wurde, oder weil ich mich mit den Einstellungen mit Firebug nicht auskenne :$ .
Daraus, dass dein serverseitiges Script mit den Daten, die es ggf. bekommt, nichts anfangen kann, den Schluss zu ziehen, es bekäme überhaupt keine, wäre zwar einfach, aber wahrscheinlich einfach falsch.
Der Server empfängt folgendes (direkt vom socket.getInputStream() gelesen):
POST /?loadGraphFromServer&D:~graphen~graph1.tg HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: text/plain; charset=UTF-8
Referer: http://localhost/?loadGraphFromServer&D:~graphen~graph1.tg
Content-Length: 5
Pragma: no-cache
Cache-Control: no-cache
null
Habe ich vielleicht einen Header nicht gesetzt, den der Browser zum verschicken braucht? Ich habe mir auch den aktuellen Parameter der send-Methode mal mit alert(...) anzeigen lassen und er ist nicht null.
Viele Grüße
Dominik