2016-04-03 16 views
1

JavaScript関数からのリクエストに対する応答として、いくつかのHTMLを送信するJavaサーブレットを取得しようとしています。しかし、サーブレット関数が呼び出され、応答を送信しているように見える間に、Javascript関数は空のStringだけを取得しています。ここでJavaScriptへのJavaサーブレットの応答

は、サーブレットの方法である:ここで

String type = request.getParameter("type"); 
if(type.equals("locos")) { 
      response.setContentType("text/html"); 

      //this prints out 
      System.out.println("Responding with vehicle list"); 

      //deal with response 
      PrintWriter out = response.getWriter(); 
      out.write("<p>test response</p>"); //finish 
     } 

JavaScript関数です:

this.updateVehicleList = function() { 
     var type = "locos"; 

     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', 'GetList?type=' + encodeURIComponent(type),true); 
     xhr.send(null); 

     //deal with response 
     var res = xhr.responseText; 

     //for testing 
     if (res == "") { 
      window.alert("I'm getting nothing"); 
     } 

     view.showVehicleList(res); 
    }; 

メッセージ "私は何を取得していますが、" 毎回出力します。実際にサーブレットからの応答を受け取るためにJavaScriptを取得するにはどうすればよいですか?

+0

関連:[?サーブレットとAjaxを使用する方法](http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax)働いた – BalusC

答えて

1

非同期要求を作成しているため、応答がすぐに利用できません。応答が受信される前にresponseTextを取得しようとしています。

onreadystatechangeイベントを使用します。

... 
... 
xhr.send(null); 

xhr.onreadystatechange = function() { 
    if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200){ 
     //deal with response 
     var res = xhr.responseText; 

     //for testing 
     if (res == "") { 
      window.alert("I'm getting nothing"); 
     } 

     view.showVehicleList(res); 
    } 
}; 

あなたが同期要求を作るしようとしている場合は、falseに三番目の引数を設定し、元のコードが動作します。

xhr.open('GET', 'GetList?type=' + encodeURIComponent(type),false); 
//               ^^^^^ 
+0

。ありがとう。 – Cailean

関連する問題