2017-06-16 138 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()的結果。如果它是錯誤的,請求將不會被髮送。

我沒有測試它,但它會是這樣的:

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

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

你能解釋一下嗎()=> true –

+0

這只是簡明的ES6箭頭函數語法。如果它只有一個語句,則不需要調用return或include括號。這與編寫函數(){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叫你可以遍歷一個全球性的數量和成功執行,你可以做一個回縮,從而保持穩定的流動每次。如果(globalCount < 5){call new ajax event}

1

以下是對所有ajaxRequests進行評分的方法。您可以在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; 
    } 
});