能否使用Jquery优化大量Ajax循环操作?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

能否使用Jquery优化大量Ajax循环操作?

2016-03-24 09:41:52 1642 1

原代码是使用一个循环执行批量的$.get操作,如果使用单一循环过大,会瞬间对服务器做成大量请求。

for (i = 1; i < n; i++) {
    $.get("http://xxx/" + i,
    function(data) {
        do other..
    })
}

如果可以实现能否使用jQuery的Deferred Object进行代码的优化?把当完成一个get后再执行另外一个?令代码更有可读性?现在我用的办法是这样子:

    var url = new Array();
    for (i = 1; i < n; i++) {
        url.push("http://xxx/" + i)
    }
    var doGet = function() {
        if (url.length > 0) {
            var tmpimg = url.shift();
            $.get(tmpimg,
            function(data) {
                setTimeout(function() {
                    doGet()
                },
                500); //延时执行
            })
        } else {
            //完成//
        }
    };
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 19:11:57

    属于流程控制问题。

    可以借鉴很多 Flow Control 的库类来协助完成该功能。例如 wind.js, async 等。

    使用这些的好处是可以更方便地处理异常。楼上的递归方法很好的解决了问题,但是如果出现异常,就不方便处理了。

    花了几分钟自己裸写了一个,供参考。推荐去学习 wind.js , async 的实现(我还没看过 -_- )。

    这个的优点是统一异常的处理。代码的层级可能会少一些。

    全选复制放进笔记

    var series = function (arr, iterator, callback) {
    
      var queues = [];
    
      var next = function (err) {
        if (err) {
          callback(err);
          return;
        }
        if(queues.length == 0) {
          callback();
          return;
        }
        queues.shift()(next);
      };
    
      var curry = function (func) {
        var args = [].slice.call(arguments);
        args.shift();
    
        return function () {
          args.concat([].slice.call(arguments));
          func.apply(func, args);
        }
      };
    
      for (var i = 0, n = arr.length; i < n; i++) {
        queues.push(curry(iterator, arr[i]));
      }
    
      next();
    };
    
    var urls = [];
    for (var i = 1; i < n; i++) {
      urls.push("http://xxx/" + i)
    }
    
    series(urls, function(url, next) {
      $.get(url, function(data) {
        // 随便做啥
    
        if(success) {
          // 如果没有任何问题
          next(null)
        } else {
          // 如果发生了某些错误
          var err = new Error();
          next(err);
        }
      })
    }, function(err) {
      if(err) {
        // 处理异常
    
      }
    });
    0 0
相关问答

1

回答

请教一个jquery的多次循环出错问题!? 400 报错

2020-06-04 15:19:54 349浏览量 回答数 1

1

回答

jQuery使用each遍历循环的方法

2019-12-16 14:55:39 1583浏览量 回答数 1

1

回答

jQuery自动触发事件怎么写?要循环的!

2016-07-11 17:52:15 1854浏览量 回答数 1

2

回答

请教一个jquery的多次循环出错问题!

2016-07-07 10:35:32 1750浏览量 回答数 2

1

回答

jQuery循环查询,新增样式~求助

2016-07-06 14:39:26 1438浏览量 回答数 1

1

回答

在jQuery中取在smarty中循环出来的id

2016-07-06 09:31:55 1550浏览量 回答数 1

1

回答

jQuery中如果我用extend的方法,那么如何在在进入循环时移除他

2016-06-23 15:31:36 2076浏览量 回答数 1

1

回答

关于jquery根据文本框中输入的数,实现数组循环的问题

2016-06-01 00:10:45 1847浏览量 回答数 1

1

回答

jquery如何循环get后将请求到的json合并

2016-05-27 11:07:40 1857浏览量 回答数 1

1

回答

jquery在循环中取i值

2016-05-27 10:27:03 1452浏览量 回答数 1
文章
问答
问答排行榜
最热
最新
相关电子书
更多
JavaScript异步编程
立即下载
JavaScript函数
立即下载
低代码开发师(初级)实战教程
立即下载