Ajax不读取JSON servlet的答案

时间:2013-01-29 03:19:38

标签: javascript jquery servlets

我正在使用ajax和javascript进行可怕的噩梦...我正在尝试阅读JSON答案并重定向到其他网站。

我的Javascript应该查询等待procedure == login ||的验证servlet loginAlreadyInUse然后将其重定向到其他地方:

<script type="text/javascript">
var userId = "<%=request.getSession().getId()%>";
var timeInterval=self.setInterval("check_userId()", 3000);

function check_userId() {
$.post('http://localhost:8080/qrlogin/verify', {userId: userId}, 
    function(data) {
       if(data.procedure == "login") {
             window.location = 'http://localhost:8080/qrlogin/login'+userId;
        }
       else if(data.procedure == 'loginAlreadyInUse') {
            window.location = 'http://localhost:8080/qrlogin/'+userId;
         }
     }, "json");

}

此刻验证servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.setContentType("text/javascript");
    PrintWriter out = response.getWriter();
    // Assuming your json object is **jsonObject**, perform the following, it will return your json object  
    out.print("{'procedure' : 'login' }");
    out.flush();
    return;
}

问题是脚本永远不会重定向到登录页面。 (继续每3秒发一次......)

谢谢你的时间,

1 个答案:

答案 0 :(得分:4)

  1. "{'procedure' : 'login' }" is not valid JSONJSON must be double-quoted,中的所有键和字符串都不是单引号。所以你需要out.print()代替这一点:
    "{\"procedure\" : \"login\" }"

  2. text/javascript is the wrong MIME type for JSON. Use application/json.

  3. 不要将字符串传递给setInterval(或setTimeout,就此而言)。这是伪装的eval,我们都知道这是邪恶的(对吗? 对吗? )。只需传递函数本身:

    var timeInterval=self.setInterval(check_userId, 3000); // look ma, no quotes