Java servlet 对 Java 脚本的响应
Java servlet response to JavaScript
我正在尝试让 Java Servlet 发送一些 HTML 作为对来自 JavaScript 函数的请求的响应。但是,在调用 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
}
这是Java脚本函数:
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);
};
每次输出"I'm getting nothing"信息。如何让 Java 脚本实际接收来自 Servlet 的响应?
您正在发出异步请求,因此无法立即获得响应。您正在尝试在收到响应之前获取 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);
// ^^^^^
我正在尝试让 Java Servlet 发送一些 HTML 作为对来自 JavaScript 函数的请求的响应。但是,在调用 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
}
这是Java脚本函数:
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);
};
每次输出"I'm getting nothing"信息。如何让 Java 脚本实际接收来自 Servlet 的响应?
您正在发出异步请求,因此无法立即获得响应。您正在尝试在收到响应之前获取 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);
// ^^^^^