jquery的$.ajax已经支持链式调用,顺序执行。但是尝试了下还是没有按顺序执行。
由输出控制台可知ajax仍然没有等到上一个执行完便执行下一个了。
--------------------更新-------------------------
昨天回答的 js在循环中 延迟执行 该如何写,回答时写的 异步执行 的 demo,正好是用的ajax的例子。
直接复制过来了。
//老规则,为了方便复制,TaskControl 再写一遍 //创建任务控制类 var TaskControl = function(taskFunction, finishFunction){ this.finish = false; this.next = function(){ if( !this.finish ){ taskFunction.call(this); }else{ finishFunction.call(this); } }; }; //老规则,为了方便复制,TaskControl 再写一遍:结束 //任务 var task = function(){ this.index++; //判断列表中还有没有任务 if( this.index >= this.data.length ){ this.finish = true; //继续下一个,触发完成 this.next(); }else{ console.time("任务:" + this.index); //如果还有任务,开始处理任务 this.cache.push({ url : "/q/" + this.data[this.index], index : this.index, start : new Date() }); $.get(this.cache[this.index].url, (function(html){ this.cache[this.index].finish = new Date(); this.cache[this.index].htmlsize = html.length; console.log(this.cache[this.index]); console.timeEnd("任务:" + this.index); //继续下一个 this.next(); }).bind(this)); } }; var finish = function(){ console.log("任务完成"); console.table(this.cache); }; var run = new TaskControl(task, finish); //为了测试方便,将数据也绑定过来 run.data = ["1010000007271957", "1010000003115114", "1010000007271957", "1010000007271957"];//列表 run.index = -1; //默认索引 run.cache = []; //设置个执行缓存 run.next(); //开始执行
你的写法错了,then里面需要传进去是一个回掉函数,应该这么写
$.ajax() .then(function(data){ $.ajax() }) .then(function(data){ $.ajax() })
你那么写,直接就执行了