在我的代码中,我需要使用 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/