$.Deferred(),for循环内异步请求问题的解决办法

来源:互联网 发布:软件研发部门规划 编辑:程序博客网 时间:2024/06/05 04:19

问题:有一个数组,数组中每一个元素异步请求后端获得相应的内容进行操作。

var arr=[];forlet i=0;i<arr.length;i++){    $.post("请求地址",“传递数据”,function(){         //异步请求后的操作   })}

for循环中使用异步请求时出现的问题就是:异步请求是不阻塞主程序,当异步请求出数据的时候,主程序可能已经结束,这就给我们程序带来问题。

如何在for循环内使用异步请求,同时保证数据的执行顺序?

解决办法:$.Deferred()

var lives=[……];var defer = $.Deferred(); defer.resolve($("#aa").append("没有意义")); //该句为必须的,即使什么也不需要操作$.each(lives,function(i,e){    defer = defer.then(function () {        return $.ajax({      //进行异步请求操作        url:"请求地址",          type:'post',        data:{            //异步请求的数据          "username":lives[i].username,          "userId":lives[i].id,        },        dataType: "jsonp",        success:function(data){            //异步请求后的操作        }      })  });  });

另外$.deferred()相关内容还有很多,记录相关地址,以便以后学习查看:

http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.htmlhttp://www.css88.com/archives/4750/comment-page-1