我有这个问题,昨天我已经问了这个问题,但我没有任何答案...... :(
我在客户端有这个代码:
var formdata = new FormData();
//fill fields of formdata... for example:
var file = document.getElementById("file").files[0];
formdata.append("file", file);
//and others....but the problem is not here
var xhr = new XMLHttpRequest();
xhr.open("POST","http://127.0.0.1:8080/Commerciale",true);
xhr.send(formdata);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var str = xhr.responseText;
alert(str);
}
}
});
到目前为止看起来很公平。在servlet中我有这段代码:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
***other code, but i think that the problem is here:
PrintWriter ajaxWriter = response.getWriter();
ajaxWriter.println(p.getJSON());
ajaxWriter.flush();
System.out.println(p.getJSON());
ajaxWriter.close();
}
问题在于
System.out.println(p.getJSON());
打印出我期望的内容,但似乎
xhr.responseText
没有返回任何内容,事实上,警报是空的。
有人可以解释我为什么?答案 0 :(得分:1)
:)发现这是原因之后:
冲洗后你不应该关闭作者 删除行:
ajaxWriter.close();
一个有趣的相关问题 - Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?
虽然没有禁止关闭编写器/流的特定文档 - 这是容器应该执行的而不是应用程序。
答案 1 :(得分:0)
您应该在POST请求中设置内容类型:
var formdata = new FormData();
var file = document.getElementById("file").files[0];
formdata.append("file", file);
var xhr = new XMLHttpRequest();
xhr.open("POST","http://127.0.0.1:8080/Commerciale",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var str = xhr.responseText;
alert(str);
}
}
};
xhr.send(formdata);