在我的代码中,我需要使用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();
});
谢谢
答案 0 :(得分:5)
这是你的问题:
setTimeout(startPoll(),5000);
你立刻打电话给startPoll
,而不是5秒后。相反,你应该传递函数引用,如下所示:
setTimeout(startPoll,5000);
如果您希望轮询每5秒触发一次,即使之前的民意调查不起作用(遇到服务器错误),也应该使用setInterval
代替。如果您希望能够在出现错误时停止轮询,那么您现在拥有的代码非常棒。
答案 1 :(得分:1)
我认为你需要使用setInterval
而不是setTimeout<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var startPoll = function() {
$.post('url', {}, function(response) {
var responseObject = eval(response);
if (responseObject.success) {
alert('hi');
}
}, 'json');
}
setInterval(startPoll, 5000); /*Make next polling request after 5 seconds*/
});
</script>
</head>
<body>
</body>
</html>