为了账号安全,请及时绑定邮箱和手机立即绑定

对ajax请求进行排序

对ajax请求进行排序

慕哥6287543 2019-07-26 14:43:53
对ajax请求进行排序我发现有时我需要迭代一些集合并为每个元素进行ajax调用。我希望在转移到下一个元素之前返回每个调用,这样我就不会向服务器发送请求 - 这通常会导致其他问题。我不想将异步设置为false并冻结浏览器。通常这涉及设置某种迭代器上下文,我逐步通过每个成功回调。我认为必须有一个更简洁的方式吗?有没有人有一个聪明的设计模式,如何通过一个集合为每个项目制作ajax调用整齐地工作?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

使用延期承诺的快速小解决方案。虽然这使用jQuery $.Deferred,但任何其他人都应该这样做。

var Queue = function () {
    var previous = new $.Deferred().resolve();

    return function (fn, fail) {
        return previous = previous.then(fn, fail || fn);
    };};

用法,调用创建新队列:

var queue = Queue();// Queue empty, will start immediatelyqueue(function () {
    return $.get('/first');});// Will begin when the first has finishedqueue(function() {
    return $.get('/second');});

请参阅示例,并对异步请求进行并排比较。


查看完整回答
反对 回复 2019-07-26
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

理想情况下,一个具有多个入口点的协程,因此从服务器回调的每个回调都可以调用相同的协程。该死的,这将在Javascript 1.7中实现。

让我尝试使用闭包......

function BlockingAjaxCall (URL,arr,AjaxCall,OriginalCallBack){    
     var nextindex = function()
     {
         var i =0;
         return function()
         {
             return i++;
         }
     };

     var AjaxCallRecursive = function(){
             var currentindex = nextindex();
             AjaxCall
             (
                 URL,
                 arr[currentindex],
                 function()
                 {
                     OriginalCallBack();
                     if (currentindex < arr.length)
                     {
                         AjaxCallRecursive();
                     }
                 }
             );
     };
     AjaxCallRecursive();    }// suppose you always call Ajax like AjaxCall(URL,element,callback) you will do it this wayBlockingAjaxCall(URL,myArray,AjaxCall,CallBack);


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 738 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信