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

Java XmlHttpRequest级别2:响应不返回任何内容,java,httpresponse,xmlhttprequest-level2,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 i

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

我在客户端有以下代码:

 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 
不返回任何内容,事实上,警报是空的


有人可以解释一下原因吗?

您应该根据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);

您应根据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);
:)发现原因后:

刷新后不应关闭写入程序。
删除该行:

ajaxWriter.close();
一个有趣的相关问题-

虽然没有特定文档禁止关闭写入程序/流-但这是容器应该执行的操作,而不是应用程序。

:)在发现原因后:

刷新后不应关闭写入程序。
删除该行:

ajaxWriter.close();
一个有趣的相关问题-


尽管没有特定文档禁止关闭写入程序/流-这是容器应该执行的操作,而不是应用程序。

您使用了哪个浏览器?尝试不关闭写入程序(这应该不是问题,但您也不需要它),现在它可以工作了!!!非常感谢。如果你写下这个问题的答案,我会注意到你的答案是正确的当然-谢谢:)你用哪个浏览器试过这个?试着不要关闭writer(这应该不是问题,但你也不需要它),现在它可以工作了!!!非常感谢。如果你写下这个问题的答案,我会注意到你的答案是正确的当然-谢谢:)通过xhr.getResponseHeader检查HTTP响应,以调试如果我更改内容类型,它会给我以下错误:错误:请求不包含多部分/表单数据或多部分/混合流,内容类型标头实际上是application/x-www-form-urlencoded,该内容类型与级别1的XmlHttpRequest一致..通过xhr.getResponseHeader检查HTTP响应,以进行调试如果我更改了内容类型,它会给我以下错误:错误:请求不包含多部分/表单数据或多部分/混合流,内容类型头实际上是application/x-www-form-urlencoded,该内容类型与级别1的XmlHttpRequest没有关系。。