2017-04-14 50 views
0

我在我的尝试中发出太多的API请求,导致自己收到临时API禁令。下面是我在做什么:

$.each(api_field, function(index, sector) { 
    "use strict"; 
    $.each(sector, function(key, values) { 
     $.getJSON("URL", function(result){ 
      $.each(result, function(i, field){ 
       $("body").append(field + " "); 
      }); 
     }); 
    }); 
}); 

我的脚本运行通过62个URL和每个API请求我需要休息1-5秒。我怎样才能使用jQuery .wait()函数来不请求所有数据仅仅是秒?

注意:我的脚本完全正常工作,我只需要为每个请求添加一个延迟。

+0

请注意,这是一个异步请求。 – Mazz

+0

为什么两个$ .each在ajax之前使用。?你能说出从上到下的第二个目的是什么吗? – Jai

+0

以多维方式遍历我的字段数组。 –

回答

2

你不需要jQuery。使用setTimeout

var i = 0; 
$.each(api_field, function (index, sector) { 
    "use strict"; 
    $.each(sector, function (key, values) { 
     i++; 
     setTimeout(function() {   
     $.getJSON("URL", function (result) { 
      $.each(result, function (i, field) { 
      $("body").append(field + " "); 
      }); 
     }); 
     }, 1000 * i); // Or 5000 
    }); 
    }); 
+0

我的理解是'setTimeout()'不是非常适合跨浏览器使用,特别是如果用户更改了标签?我过去曾用'setTimeout()'做过破坏...... –

+0

你从哪里得到这些信息? 'setTimeout' [所有主流浏览器支持](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Browser_compatibility)。用户更改标签时不太了解您的其他问题。 – Saravana

2

我在过去的项目中已经遇到过这个问题。 我用.delay()延迟迭代过程。

如果你使用.delay()

$.each(api_field, function(index, sector) { 
    "use strict"; 
    $.each(sector, function(key, values) { 
     $.getJSON("URL", function(result){ 
      $.each(result, function(i, field){ 

       $("body").delay(5000*i).queue(function(next){ 
        $(this)..append(field + " "); 
        next(); 
       }); 

      }); 
     }); 
    }); 
}); 

时间更改为你想要什么1000 = 1s

+0

延迟似乎在错误的地方......不应该在请求URL之前或之前?目标是延迟每个'.getJSON',我目前仍然在设置API限制,这只是延迟将信息附加到主体。 –

0

可以使用的setTimeout有一个延迟:

setTimeout(function(){ 
    $.getJSON("URL", function(result){ 
     $.each(result, function(i, field){ 
      $("body").append(field + " "); 
     }); 
    }); 
},1000*index);//<---index from outermost each. 

这将使每个迭代的延迟一秒钟。