2011-08-16 32 views
7

5秒間に1つのアクションを実行できるAPIと対話しています。しかし、私はすべての要求がホストで終わるようにしたい。 .ajax()を使用してAPIに対して行われたリクエストをキューに入れてスロットルする方法はありますか?jQuery AJAXリクエストのスロットリングとキューイング

多くの義務付け!

答えて

9

var requests = []; 

setInterval(function() { 
    if(requests.length > 0) { 
     var request = requests.pop(); 
     if(typeof request === "function") { 
      request(); 
     } 
    } 
}, 5000); 

// then anywhere you need to make an ajax request 
requests.push(function() { 
    // ajax request here 
    $.ajax({ 
     url: "/foo", // some variable from outer scope 
     success: function(a,b,c) { 
      // handle it 
     } 
    }); 
}); 
1

私は非常にAjaxリクエストを絞るために、このプラグインをお勧めします:http://benalman.com/projects/jquery-throttle-debounce-plugin/あなたは、あなたが最良のインターネット以外の媒体を取得したい何かを確保にしたい場合は

+0

これは、すべての要求が実際に行われることを保証するものではありません。 – Gordon

-2

- それは本質的に信頼できません。とにかく、を試すには、を試してください.Javascript setTimeoutメソッドを使用して後で呼び出しを開始できます。

その他のサードパーティリソースを使用したくない場合は、delayメソッドがjQueryによって公開されていることがわかります。あなたはこれらの線に沿って何かをすることができ

+3

これは実証されていない意見です。インターネット上での信頼性の高いデータ伝送は日常的です。 – Konrads

3

jQueryのは、私はあなたがチェックアウトして読ん示唆.delay()とインターフェースを持っています。

+0

delay()およびqueue()は、エフェクトキューを使用するアニメーションにのみ適用されます。 AJAXの遅延には役立ちません。 – thenickdude

+1

@Lamah '.delay()'と '.queue()'はあなた自身のキュー(またはアニメーションに使われるデフォルトの 'fx'キュー)に使うことができます。任意の汎用関数を任意の名前のキューに追加できます。 – Chad

+0

あなたは大丈夫です。ドキュメントをもっと詳しく読む方法を学ぶ必要があります。 – thenickdude

関連する問題