在jquery中全局限制$ .ajax请求

时间:2017-06-16 20:12:03

标签: javascript jquery ajax

是否有办法通过$.ajaxSetup限制请求,以便在Y秒内X请求之后的任何事情都不会发生,直到时间过去因此限制可以自行重置?我知道我可以使用jquery throttle, 但我正在寻找实现所有$.ajax$.get$.post的全球方式。

例如,我可能会设置我将在5秒内仅允许20个请求。在21号请求中,我将有一个错误处理程序来显示消息。计数器每5秒重新开始一次,这样他们就可以再次提出请求。

3 个答案:

答案 0 :(得分:2)

这是一种评估所有ajaxRequests的方法。您可以在MS中定义速率限制间隔以及在给定时间段内允许的请求数量。

Ticks

答案 1 :(得分:0)

  1. 限制一个函数isSafe(),如果它好转则返回true,否则返回false。

  2. 在ajaxSetup中,让beforeSend()返回isSafe()的结果。如果为false,则不会发送请求。

  3. 我没有测试过它,但它会是这样的:

     const isSafe = $.throttle(numberOfMillis, () => true);
    
     $.ajaxSetup({
         beforeSend: isSafe
     });
    

答案 2 :(得分: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}