Ajax 不读取 JSON servlet 答案

Ajax does not read JSON servlet answer

本文关键字:servlet 答案 JSON 读取 Ajax      更新时间:2023-09-26

我在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 秒发布一次帖子...

谢谢你的时间,

  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