2017-06-16 19 views
-1

$.ajaxSetup経由のリクエストをスロットルする方法はありますか?Y秒後にXリクエストが発生しても何も起こらないので、スロットルがリセットされる可能性があります。私は使用できることを知っていますjquery throttle、 しかし、私はすべての$.ajax$.get、および$.postを有効にするグローバルな方法を探しています。

たとえば、5秒間に20件のリクエストしか許可されないことがあります。 21回目のリクエストでは、メッセージを表示するエラーハンドラがあります。 5秒ごとにカウンターが開始され、ユーザーは再び要求を行うことができます。

+0

は、[この参考になりましたか?](https://stackoverflow.com/questions/7082527/jquery-throttling-and-queuing-of-ajax-requests)受け入れられた答えは、あなたのインスタンスで動作するように思われます'setInterval()'関数をグローバルにしてください。 – wahwahwah

答えて

0
  1. スロットル機能、isSafe()は、正常に行かないとtrueを返し、それ以外の場合はfalseを返します。

  2. ajaxSetupでは、beforeSend()でisSafe()の結果を返します。 falseの場合、要求は送信されません。

私はそれをテストしていませんが、それはのようになります。

const isSafe = $.throttle(numberOfMillis,() => true); 

$.ajaxSetup({ 
    beforeSend: isSafe 
}); 
+0

説明できますか()=> true –

+0

これは、簡潔なES6矢印関数の構文です。文が1つしかない場合は、returnまたは括弧を含める必要はありません。これはfunction(){return true;と同じです。 }。 – cheesenthusiast

0

は、あなたが関数にAJAX呼び出しを入れて、その関数が呼び出された回数を追跡することができませんでしたか?

var globalCount = 0; 
    var ajaxOperations = { 
     init: function(){ 
      //init 
     },   
     loadNewsletterTemplate: function(templateDataFile){ 
      globalCount++; 
      $.ajax({ 
       url: "data/" + templateDataFile, 
       type: "GET", 
       success: function(response){ 
       globalCount--; 
        formProcessing.convertToHTML_newsLetter_weeklyUpdates(response); 
        //console.log("response" + response); 

       }  
      });       
     }  
    } 

たびajaxOperations

は、グローバル数と成功は、あなたがそれによって定常流を維持し、撤回を行うことができます行われるたびに繰り返すことができ呼ばれます。 If(globalCount < 5){call new ajax event}

1

すべてのajaxRequestをレート制限する方法です。 MSのレート制限間隔と、指定された期間に許可される要求の数を定義できます。

var RATE_LIMIT_IN_MS = 100; 
var NUMBER_OF_REQUESTS_ALLOWED = 2; 
var NUMBER_OF_REQUESTS = 0; 

setInterval(function() 
{ 
    NUMBER_OF_REQUESTS = 0; 

}, RATE_LIMIT_IN_MS); 

$.ajaxSetup ({ 
    beforeSend: function canSendAjaxRequest() 
    { 
     var can_send = NUMBER_OF_REQUESTS < NUMBER_OF_REQUESTS_ALLOWED; 
     NUMBER_OF_REQUESTS++; 
     return can_send; 
    } 
}); 
関連する問題