XmlHttpRequest级别2:响应不返回任何内容

时间:2012-10-14 08:11:34

标签: java httpresponse xmlhttprequest-level2

我有这个问题,昨天我已经问了这个问题,但我没有任何答案...... :(

我在客户端有这个代码:

 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 

没有返回任何内容,事实上,警报是空的。

有人可以解释我为什么?

2 个答案:

答案 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);