是否有一種方法通過$.ajaxSetup
來限制請求,所以在Y秒內X請求之後的任何事情都不會發生,直到時間流逝,因此節流可以自行重置?我知道我可以使用jquery throttle, 但我正在尋找一種全局方式來實現所有$.ajax
,$.get
和$.post
。
例如,我可能會設置我將在5秒內只允許20個請求。在第21次請求中,我將有一個錯誤處理程序來顯示消息。每5秒鐘計數器將重新開始,以便他們可以再次發出請求。
是否有一種方法通過$.ajaxSetup
來限制請求,所以在Y秒內X請求之後的任何事情都不會發生,直到時間流逝,因此節流可以自行重置?我知道我可以使用jquery throttle, 但我正在尋找一種全局方式來實現所有$.ajax
,$.get
和$.post
。
例如,我可能會設置我將在5秒內只允許20個請求。在第21次請求中,我將有一個錯誤處理程序來顯示消息。每5秒鐘計數器將重新開始,以便他們可以再次發出請求。
調節一個函數isSafe(),返回true,如果它很好,否則返回false。
在ajaxSetup中,有beforeSend()返回isSafe()的結果。如果它是錯誤的,請求將不會被髮送。
我沒有測試它,但它會是這樣的:
const isSafe = $.throttle(numberOfMillis,() => true);
$.ajaxSetup({
beforeSend: isSafe
});
你能解釋一下嗎()=> true –
這只是簡明的ES6箭頭函數語法。如果它只有一個語句,則不需要調用return或include括號。這與編寫函數(){return true; }。 – cheesenthusiast
你們能不能把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}
以下是對所有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;
}
});
[這是有幫助嗎?](https://stackoverflow.com/questions/7082527/jquery-throttling-and-queuing-of-ajax-requests)接受的答案似乎在您的實例工作只使'setInterval()'函數全局。 – wahwahwah