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

joh*_*swr 0 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();

});
Run Code Online (Sandbox Code Playgroud)

谢谢

Mag*_*nar 5

这是你的问题:

setTimeout(startPoll(),5000);
Run Code Online (Sandbox Code Playgroud)

startPoll马上打电话,而不是5秒钟后.相反,你应该传入函数引用,如下所示:

setTimeout(startPoll,5000);
Run Code Online (Sandbox Code Playgroud)

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