Servlet对浏览器上显示的纯文本的Javascript响应

时间:2015-03-27 09:34:27

标签: javascript servlets

我让我的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功能吗?

2 个答案:

答案 0 :(得分:1)

最好根据您的要求forward您的请求,例如:

RequestDispatcher rd=request.getRequestDispatcher("./project/page1.jsp");
rd.forward(request, response);

答案 1 :(得分:0)

我找到了解决方案,抱歉这个问题。代码实际上工作正常,只是在某些情况下,Servlet不会被此更新函数调用,而是来自同一页面的另一个表单。所以答案当然不是发送给函数,而是解释了不当行为。

是否有关于Servlet网页通信的最佳实践指南?我想我将非常需要它。