javascript - 多个ajax请求的速率限制

标签 javascript jquery ajax

我正在尝试对我的 ajax 请求进行速率限制,以便保持在 API 限制之内。我向我的服务器发出一个请求,该请求返回一个数据列表。从该数据列表中,我向一个 api 发出请求,该 api 不允许每秒接收多个请求。如何使用 setTimeout 或类似的函数来限制我的请求?

myArray = ['1','2','3'];

function f1(){
    for (var num in myArray){
        $.ajax({
            type: "POST",
            url: "backend.php",
            data: {suburbs : num}, 
            success: function(data){
                for (var item in data){
                    f2(data[item])
                }
            }
        });
    }
}

function f2(text) {
    $.getJSON("http://example.com/test.html?" + text, null, function (data) {
        console.log(data)
    }
}

最佳答案

只需创建一个函数列表:

var duration = 1000; // API duration
var expectAsync = 3000; // time to wait for new functions;
var lastCall = Date.now();
var myArray = ['1','2','3'];
function queryArray() {
  var fnList = [];
  myArray.forEach(function(v){
    fnList.push( function() { // push f1 to list;
       $.ajax({
        type: "POST",
        url: "backend.php",
        data: {suburbs : v}, 
        success: function(data){
            fnList.push(function(){ // push f2, after we get response;
              for (var item in data){
                f2(data[item]);
              }
            })

        }
    })
  });
  // here we go;
  var int;
  int = setInverval(function(){
    if(fnList.length){
      var fn = fnList.shift(); // pop first function from left;
      fn();
    }else{
      if((Date.now() - lastCall) > expectAsync) clearInterval(int); 
    }
    lastCall = Date.now();
  }, duration);
}

关于javascript - 多个ajax请求的速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295688/

相关文章:

javascript - 如何根据操作系统调整 html 输出?

javascript - HTML5 视频和 Chrome/Webkit

c# - 继承/覆盖来自不同外部文件的现有 CSS 规则

javascript - 使用ajax jquery将变量传递给php页面?

javascript - 使用 jQuery 验证 Bootstrap 表单

javascript - 如何将 Ruby 正则表达式转换为 JavaScript?

javascript - 带有 iFrame 的后退按钮

jquery - 如何淡化循环背景图像?

php - 从 php/mysql 自动完成中获取值

php - Select2 Ajax不匹配结果