2016-04-03 99 views
1

我试图让一个Java Servlet发送一些HTML作为对来自JavaScript函数的请求的响应。但是,虽然servlet函数正在调用并似乎在发送响应,但JavaScript函数只是一个空字符串。Java servlet对JavaScript的响应

这里是Servlet方法:

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实际接收Servlet的响应?

+0

相关:[?如何使用Servlet和阿贾克斯(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