异步ajax请求如何控制执行循序
ajax多个请求时,如果下一次请求依赖上一次的请求结果,或者希望能按照请求循序先后返回,而不是乱序返回,需要自己写代码控制ajax的执行循序,而不是for或者jquery的each并发发起ajax请求,这样无法控制ajax的返回循序。当然如果你不想用异步请求,改为同步请求可以控制for,each的并发ajax请求返回循序,但是对于jsonp这种只能异步加载的数据,async配置并没有效果。
解决办法:自己写逻辑控制ajax的执行循序,在上一次请求结束后再继续发送下一次的请求,做递归调用。不过有个问题,对于jsonp,如果动态页出错,会导致不会触发success/error,后续的请求无法继续。
异步ajax请求控制执行循序代码递归结构
function loads() { var reports = ['cpu_report', 'mem_report', 'load_report', 'network_report']; var url = 'data.ashx?job='; rendering(currentPath, 0, reports); /*//不能用each或者for进行递归调用,无法控制返回的循序 $.each(reports, function (index, report) { rendering(url + report, index); })*/ } function rendering(url, index,reports) { $.ajax({ url: url + reports[index], type: "get", dataType: 'jsonp', jsonp: "jsonpCallback", success: function (result) { console.log('rendering - ' + index); index++;//递归调用 if (index < reports.length) rendering(url, index, reports); } }); }
加支付宝好友偷能量挖...
原创文章,转载请注明出处:异步ajax请求如何控制执行循序