我有以下情况:
我有一个javascript ajax函数loadCars()
,需要在页面加载10秒后调用,然后每隔60秒调用一次。
以下是我到目前为止所尝试的内容:
setTimeout(function(){setInterval(function(){loadCars()}, 60000)}, 10000);
发生的事情是该功能在10秒后被调用,但再也没有,我错过了什么?
答案 0 :(得分:5)
您需要在loadCars
和setTimeout
上致电setInterval
。
setTimeout(function() {
console.log('first 10 secs');
// loadCars();
setInterval(function() {
console.log('60 secs has passed');
// loadCars();
}, 60000);
}, 10000);
console.log('page loaded');

答案 1 :(得分:1)
你可以在setTimeout(loadCars, 60000)
方法中调用loadCars()
,最初用setTimeout
10秒调用它,然后从那一点开始,每次执行时都会超时1分钟...
function loadCars()
{
//code
setTimeout(loadCars, 60000);
}
setTimeout(loadCars, 10000);
如果您希望仅在完成ajax
通话后安排下一次超时,则可以进行同步ajax
来电或将setTimeout()
置于您的success
回拨中你的ajax
电话......后者是更好的选择。
答案 2 :(得分:1)
我不同意给出的答案,因为他们使用setInterval或者不等待ajax调用完成。 IMO你应该只在函数loadcars(和ajax调用)结束时设置一个新的超时。
示例:强>
function loadCars () {
// ajax call happens here
$.ajax()
.then(function(){
// call the function here
setTimeout(function(){
loadCars();
// wait a minute after you recieved the data
}, 60000)
})
}
// wait 10 seconds
setTimeout(function(){
loadCars();
}, 10000)
这样做的好处是,它只会在HTTP请求完成时开始设置新的超时,并防止该功能失去同步。如果你将setinterval与ajax调用结合使用,那么下一个ajax调用将在60秒内发生,即使当前的一个延迟10秒(并且你不想这样)。
答案 3 :(得分:1)
为了更好地控制时间和函数调用,您可以通过以下方式指定它们:
function loadCars() {
$('#log').append('Cars loaded<br />');
};
function loadManufacturers() {
$('#log').append('Manufacturers loaded<br />');
};
function loadCustomers() {
$('#log').append('Customers loaded<br />');
};
function loadContent(delays, functions) {
if (functions.length) {
setTimeout(function () {
functions.pop()();
loadContent(delays, functions);
}, delays.pop());
};
};
loadContent([3000, 2000, 1000], [loadCars, loadManufacturers, loadCustomers]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="log"></p>
&#13;