AJAX间隔刷新?

bin*_*in0 5 ajax jquery intervals

我正在尝试将AJAX函数更新大约30秒.我有一个简单的版本,这是代码.

var refInterval = window.setInterval('update()', 30000); // 30 seconds

var update = function() {
    $.ajax({
        type : 'POST',
        url : 'post.php',
        success : function(data){
            $('.voters').html(data);
        },
    });
};
Run Code Online (Sandbox Code Playgroud)

但是,当这个功能被FIRST调用时,我不希望它等待30秒,我只想要调用该函数,然后等待30秒,再次调用,等待30秒,再次调用,等等任何帮助?

Aln*_*tak 12

考虑使用setTimeout- 它更可靠. setInterval当窗口没有焦点时,计时器可以堆叠,然后当它再次聚焦时,所有计时器都会立即运行.setTimeout如果由于某种原因第一个阻止排队,使用还可以确保您不会获得排队的多个AJAX请求.

要立即启动循环,请使用围绕该函数的IIFE("立即调用的函数表达式"):

(function update() {
    $.ajax({
        ...                        // pass existing options
    }).then(function() {           // on completion, restart
       setTimeout(update, 30000);  // function refers to itself
    });
})();                              // automatically invoke for first run
Run Code Online (Sandbox Code Playgroud)

ps不使用字符串参数setIntervalsetTimeout- 只是直接传递函数引用.

  • +1唯一一个解释将函数作为对象而不是字符串传递的人,*和*在函数完成后使用`setTimeout`,所以函数在它已经运行时永远不会尝试运行(不太可能,我知道,但是我总是以同样的方式保护)。 (2认同)