javascript - 使用 jquery 基于 ajax 的轮询中的 setTimeout 问题

标签 javascript jquery

在我的代码中,我需要使用 ajax 每 5 秒轮询一次 url。 URL 返回一个 json 响应。下面是我在 $(document).ready 中编写的代码。但是,setTimeout() 函数不起作用。收到响应后立即调用 startPoll() 函数。我想在收到响应后暂停 5 秒,然后再次调用 startPoll 函数。有办法解决这个问题吗?

$(document).ready(function(){


   var startPoll = function() {
         $.post('<url>', {},onPollRequestComplete, 'json');

   }

   var onPollRequestComplete = function(response) {

        responseObject = eval(response);

        if(responseObject.success) {
            //Do something here
        }

        setTimeout(startPoll(),5000); /*Make next polling request after 5 seconds*/         

}

startPoll();

});

谢谢

最佳答案

这是你的问题:

setTimeout(startPoll(),5000);

您将立即调用 startPoll,而不是在 5 秒后调用。相反,您应该传入函数引用,如下所示:

setTimeout(startPoll,5000);

如果您希望每 5 秒触发一次轮询,即使之前的轮询不起作用(遇到服务器错误),您也应该使用 setInterval。如果您希望能够在出现错误时停止轮询,那么您现在拥有的代码非常有用。

关于javascript - 使用 jquery 基于 ajax 的轮询中的 setTimeout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855136/

相关文章:

javascript - 使用 JavaScript 创建色轮

javascript - 如何在 jQuery 弹出窗口中显示下拉选择列表并检索所选值

javascript - jQuery - 在加载 ajax 的文件中调用函数

javascript - 尝试添加到根父节点时出现 KendoUI 未定义节点问题

javascript - 使用 Angular.js 中的 post 不起作用

JavaScript - 在 HTML5 Canvas 上生成随机像素

javascript - js_exception TypeError search.load 不是函数

JavaScript 相当于 Java 的 Charset/String 类组合,用于解码字节数组

javascript - 具有 MVC 模型的完整日历事件数组

javascript - 单击按钮时的 JQuery,向下滚动并使用 Waypoints 动画图形