jQuery中的setInterval发生得太快了

goo*_*ing 2 javascript jquery setinterval

我使用setInterval,有时它发生"太快".在这里看起来如何:

setInterval(function() {
    //here comes ajax functions and so on. 
}, 1000);   
Run Code Online (Sandbox Code Playgroud)

有时setInterval比所有那些ajax函数发生得更快,它给了我两条消息而不是一条消息.这有什么解决方案?

T.J*_*der 10

很难说出你遇到了什么,问题有点不清楚.

setInterval对于某些事情来说非常棒,但对于任何你将混合其他异步内容的东西都没有.相反,使用"重新安排setTimeout"成语:

setTimeout(doSomething, 1000);
function doSomething() {
    $.ajax("your_url", {
        success: function() {
            // Do something here

            // Do something else here
        },
        complete: function() {
            // Previous run complete, schedule the next run
            setTimeout(doSomething, 1000);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

...因为,毕竟,你的ajax电话可能需要一秒钟才能完成.

如果这不是你遇到的问题,我的猜测是你的代码看起来像这样:

setInterval(function() {
    $.ajax("your_url", {
        success: function() {
            // Do something here
        }
    });

    // Do something else here
}, 1000);
Run Code Online (Sandbox Code Playgroud)

...而且你想知道为什么"在这里做其他事情"代码在"在这里做点什么"代码之前运行.如果是这样,原因是默认情况下,ajax调用是异步的.您对通话$.ajax 开始通话,但仅此而已; 然后所有其他代码在成功(或错误)回调发生之前运行.

当然,解决方法是在顶级依赖成功回调的情况下不做任何其他事情:

setInterval(function() {
    $.ajax("your_url", {
        success: function() {
            // Do something here

            // Do something else here
        }
    });

}, 1000);
Run Code Online (Sandbox Code Playgroud)