有时遇到多个$.ajax请求同时发生,而这些请求中有依赖关系时,要求ajax请求依次顺序执行
环境
jQuery 3.3.1
实现
/**
* 提交运算函数到 document 的 fx 队列
*/
var submit = function (fun) {
var queue = $.queue(document, "fx", fun);
if (queue[0] == 'inprogress') {
return;
}
$.dequeue(document);
};
// 示例
submit(function(next){
// ajax 请求一定要包含在一个函数中
$.ajax('/apage').always(next);
});
var datas = [1,2,3,4,5,6,8,9,10];
$.each(datas, function(i, item){
submit(function(next){
// ajax 请求一定要包含在一个函数中
$.ajax('/apage',{
data:{
value:item
}
}).always(next);
});
});
注意事项
submit提交的函数不是立即执行的,函数体内写的是将来要执行的动作。
而且因为是异步的,所以需要在异步执行对象上注册处理程序,否则后续的将无法自动执行。
Ajax 尽量使用always来处理,否则中间有异常发生时就不可控了。