0

我在使用 ajax 和 javascript 时做着可怕的噩梦……我正在尝试阅读 JSON 答案并重定向到其他站点。

我的 Javascript 应该查询等待过程的验证 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 秒发一次帖子……)

谢谢你的时间,

4

1 回答 1

4
  1. "{'procedure' : 'login' }" 不是有效的 JSON。JSON 中的所有键和字符串都必须双引号,而不是单引号。所以你需out.print()要这样做:
    "{\"procedure\" : \"login\" }"

  2. text/javascript是 JSON 的错误 MIME 类型。使用application/json.

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

    var timeInterval=self.setInterval(check_userId, 3000); // look ma, no quotes
    
于 2013-01-29T03:24:43.033 回答