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

时间:2015-06-24 14:46:27

标签: javascript jquery

我有以下情况:

我有一个javascript ajax函数loadCars(),需要在页面加载10秒后调用,然后每隔60秒调用一次。

以下是我到目前为止所尝试的内容:

setTimeout(function(){setInterval(function(){loadCars()}, 60000)}, 10000);

发生的事情是该功能在10秒后被调用,但再也没有,我错过了什么?

4 个答案:

答案 0 :(得分:5)

您需要在loadCarssetTimeout上致电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;
&#13;
&#13;

Playground