我让我的servlet向JS ajax调用发送以下响应:
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.print("start");
out.close();
并且来自网页的调用具有以下代码:
function update() {
var xmlhttp = new XMLHttpRequest();
var id = '${user.id}';
var height = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);
height = height-40;
var params = "action=update&id=" + id + "&height=" + height;
xmlhttp.open("POST", "/Anabasis/UserControl", true);
xmlhttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var answer = xmlhttp.responseText;
if(answer=="start"){
window.location.href = "/project/page1.jsp";
} else {
window.location.href = "/project/page2.jsp";
}
}
};
xmlhttp.send(params);
}
setTimeout(update, 10000);
如果Servlet发回了start,则应将浏览器重定向到另一个页面。这可以在用户没有做任何事情的情况下完成,因为JS请求每10秒发送一次。
现在结果是我没有得到页面的答案,只是一个带有文字的黑页:“start”
有人可以告诉我要添加什么以确保答案回到JS功能吗?
答案 0 :(得分:1)
最好根据您的要求forward
您的请求,例如:
RequestDispatcher rd=request.getRequestDispatcher("./project/page1.jsp");
rd.forward(request, response);
答案 1 :(得分:0)
我找到了解决方案,抱歉这个问题。代码实际上工作正常,只是在某些情况下,Servlet不会被此更新函数调用,而是来自同一页面的另一个表单。所以答案当然不是发送给函数,而是解释了不当行为。
是否有关于Servlet网页通信的最佳实践指南?我想我将非常需要它。