2017-04-14 8 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

なぜ2つの$が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()'でhavockを持っていた... –

+0

あなたはそれをどこで手に入れましたか? 'setTimeout'は[すべての主要なブラウザでサポートされています](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#Browser_compatibility)。ユーザーのタブを変更して他の問題を本当に理解していない。 – Saravana

2

私はこれまでの私のプロジェクトですでにこれに直面していました。 私は.delay()を使って反復処理を遅らせました。

あなたが1000 = 1sを望むものに.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(); 
       }); 

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

変更時間を使用します場合。

+0

遅延が間違った場所にあるようです...リクエストURLの前またはそれ以前にあってはなりませんか?目的はそれぞれの '$ .getJSON'を遅らせることです、私はまだAPIの制限を現時点で設定していますが、これは情報を本体に追加するのを遅らせることです。 –

0

あなたが遅れ持っているのsetTimeoutを使用することができます:それは1秒ごとの反復の遅延を行います

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

を。