Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:10秒后调用函数,然后每1分钟调用一次_Javascript_Jquery - Fatal编程技术网

Javascript:10秒后调用函数,然后每1分钟调用一次

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

我有以下情况:

我有一个javascript ajax函数
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
调用完成后安排下一个超时,则可以进行synchronus
ajax
调用或放置
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是一种好的做法。我只是回答了问题,修正了密码。