Javascript:10秒后调用函数,然后每1分钟调用一次
我有以下情况: 我有一个javascript ajax函数Javascript:10秒后调用函数,然后每1分钟调用一次,javascript,jquery,Javascript,Jquery,我有以下情况: 我有一个javascript ajax函数loadCars(),需要在页面加载10秒后调用,然后每60秒调用一次 以下是我迄今为止所尝试的: setTimeout(function(){setInterval(function(){loadCars()}, 60000)}, 10000); 发生的情况是,函数在10秒后被调用,但再也没有调用过,我缺少什么?您需要在setTimeout和setInterval上调用loadCars setTimeout(函数(){ consol
loadCars()
,需要在页面加载10秒后调用,然后每60秒调用一次
以下是我迄今为止所尝试的:
setTimeout(function(){setInterval(function(){loadCars()}, 60000)}, 10000);
发生的情况是,函数在10秒后被调用,但再也没有调用过,我缺少什么?您需要在
setTimeout
和setInterval
上调用loadCars
setTimeout(函数(){
console.log(“前10秒”);
//载重汽车();
setInterval(函数(){
console.log('60秒过去了');
//载重汽车();
}, 60000);
}, 10000);
console.log(“页面加载”)
您可以在loadCars()
方法中调用setTimeout(loadCars,60000)
,这样您可以先用setTimeout
10秒调用它一次,然后从该点开始,每次执行时它都会设置1分钟的超时
function loadCars()
{
//code
setTimeout(loadCars, 60000);
}
setTimeout(loadCars, 10000);
如果您希望仅在
ajax
调用完成后安排下一个超时,则可以进行synchronusajax
调用或放置setTimeout()
在您的成功
回调您的ajax
调用中,后者是更好的选择。我不同意给出的答案,因为它们使用setInterval或不等待ajax调用完成。在我看来,您应该只在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秒(您不希望延迟10秒)。为了更好地控制计时和函数调用,您可以通过以下方式指定它们:
功能装载车(){
$('#log').append('Cars loaded
');
};
函数loadManufacturers(){
$('#log').append('Manufacturers loaded
');
};
函数loadCustomers(){
$('#log').append('Customers loaded
');
};
函数加载内容(延迟、函数){
if(函数长度){
setTimeout(函数(){
函数pop();
加载内容(延迟、功能);
},delays.pop());
};
};
装载量([3000,2000,1000],[loadCars,loadManufacturers,loadCustomers])代码>
如果“未按预期工作”,您的意思是它在10秒后没有调用它,而是在70秒、130秒等之后调用它,只需添加一个额外的装载车()
直接在setInterval
之前。如果这不是你的意思,你能进一步解释“没有按预期工作”吗?考虑挂接某些事件(如页面完成渲染)而不是固定的时间(10秒延迟)@JamesThorpe事实恰恰相反,它在10秒后调用了函数,但从未再次调用过,你能解释一下吗?“JAMSSOPE这是我的问题,为什么我在这里问:”真的,但是(在你的例子中)你不等待请求完成。@ BRSO05,他们不认为Ajax调用会被延迟,你真的可以使用<代码> $Ajax()吗?然后也会在失败时开火,所以我仍然认为这是better@brso05您所说的paramate并没有受到反对,但最好坚持新标准,使用done()而不是success()。无论如何,最好避免脱离主题的同步ajax(在webworkers之外)。事实上,Chrome(不确定其他浏览器)已经将警告记录为recommended@JamesThorpe您是对的,这就是为什么我提供了第二个(更好的选项)将其放入success
回调函数中的原因。但是我会首先使用推荐的/更好的选项:)setInterval是一种不好的做法,它不会等待函数完成ExecutionGi没有写到setInterval是一种好的做法。我只是回答了问题,修正了密码。