【问题标题】:Success function in ajax when using setInterval doesn't work使用 setInterval 时 ajax 中的成功函数不起作用
【发布时间】:2013-11-16 15:04:05
【问题描述】:

我想每 5 秒检查一次服务器的回答。但是我在 $.ajax 中的成功函数不起作用。虽然 ajax 发送请求并获得响应。没有超过时间限制,因为函数每 5 秒运行一次,并且在 1 秒内收到响应。 如果我在 $.ajax 之后在 checkMyCreatedGame 函数中放了一些东西,它确实可以工作,但成功函数不能。

var checkMyGame;
checkMyGame =setInterval(checkMyCreatedGame,5000);
var checkMyCreatedGame = function(){
    $.ajax({
            url   :'../cgi-bin/lobby.py',
            type  :"GET",
            cache :false,
            data {
                "checkMyGameId":createdGameId,
                "player":playerName
            },
            dataType:"json",
            success:function(jsonData){
                console.log(jsonData)

            }
    });
};

这是我运行此代码时的萤火虫控制台日志(不要注意上面的内容):

这是相同的屏幕截图,但未通过 stackoverflow 调整大小:https://i.stack.imgur.com/e9HBa.png 如你所见,console.log里面的success函数没有被执行。

【问题讨论】:

  • 因为你告诉 jQuery 期待 JSON 然后发送纯文本?
  • @lonesomeday:不,dataType:"json" 是您对服务器的期望,而不是您发送到服务器的。我认为服务器端的代码有错误,success 没有被调用。如果他提供了error函数,这个函数可能会被调用。
  • 编辑您的代码,我注意到您有语法错误,例如在数据选项中缺少: 等。
  • @KhanhTO 确切地说:当 jQuery 期待 JSON 时,服务器会发送一个包含非 JSON 内容的成功响应(“200 OK”)。
  • @lonesomeday:也许我误会了,我以为“发送纯文本”来自浏览器。

标签: javascript jquery ajax setinterval


【解决方案1】:

在你的 AJAX 调用中,你告诉 jQuery 期待 JSON 数据:

dataType:"json",

然后你的服务器返回非 JSON 数据:

waiting

jQuery 然后尝试将其解析为 JSON,不出所料,失败了。如果你告诉 jQuery 期待文本,它会正常工作:

dataType:"text",

此消息是:如果您发现 AJAX 调用静默失败,请放入 error 处理程序。如果您有,您将收到一条消息,告诉您您有一个 parsererror

【讨论】:

  • 谢谢!就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2014-07-08
相关资源
最近更新 更多