如何在jQuery.each函数的每个循环之间进行延迟?

时间:2011-09-16 14:07:35

标签: javascript jquery delay each

我有这样的代码:

$('li').each(function(){
   var data = $(this).text();
   requestFunction(data, function(status){
       if ( status == 'OK' ) do stuff...
   });
});

所以,我需要在使用函数“requestFunction()”之间做一些延迟。我怎么能这样做?希望这是可以理解的,谢谢。

2 个答案:

答案 0 :(得分:26)

增加时间的setTimeout:

$('li').each(function(indexInArray){
   var data = $(this).text();
   setTimeout( function () {
       requestFunction(data, function(status){
           if ( status == 'OK' ) do stuff...
       });
   }, indexInArray * 500);
});

如果你遍历这些元素,我们想要增加超时,否则所有请求都会在没有延迟的情况下同时触发,但只有在我们的500毫秒超时后才会触发。

  • 时间开始: 0 ms
  • 第一次请求: 0 ms(500 * 0)
  • 第二次请求: 500 ms(500 * 1)
  • 第三次请求: 1000毫秒(500 * 2)

答案 1 :(得分:2)

如果您在each循环中进行ajax调用,那么您可能希望同步运行ajax请求。

为此,您可以将ajax请求的async属性设置为false

或者,您可能希望了解requestFunction的回调。这将允许您在方法返回后运行代码,并且不需要任何超时等。

回调基本上是一种在代码末尾执行的方法。你基本上告诉你的功能,这是我希望你在完成工作后打电话的另一个功能。