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