1

私はこの問題を抱えています、私は昨日すでにこの質問をしました、しかし私は何の答えもありませんでした... :(

私はクライアント側にこのコードを持っています:

 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);
              }
         }
      });

これまでのところ、それは公平に思えます。サーブレットには、次のコードがあります。

 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 

何も返しません。実際、アラートは空です。

誰かが私に理由を説明できますか?

4

2 に答える 2

1

:)これが原因であることを発見した後:

フラッシュ後にライターを閉じないでください。
次の行を削除します。

ajaxWriter.close();

興味深い関連質問-HttpServletResponse.getOutputStream()/。getWriter()で.close()を呼び出す必要がありますか?

ライター/ストリームを閉じることを禁止する特定のドキュメントはありませんが、これはコンテナーが実行する必要があるものであり、アプリケーションではありません。

于 2012-10-14T10:09:40.927 に答える
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);
于 2012-10-14T08:35:01.147 に答える