ajax顺序执行。链式调用不起作用

jquery的$.ajax已经支持链式调用,顺序执行。但是尝试了下还是没有按顺序执行。图片描述

图片描述

图片描述

由输出控制台可知ajax仍然没有等到上一个执行完便执行下一个了。
--------------------更新-------------------------
图片描述图片描述

阅读 4.6k
2 个回答

你的写法错了,then里面需要传进去是一个回掉函数,应该这么写

$.ajax()
.then(function(data){
    $.ajax()
})
.then(function(data){
    $.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();    //开始执行
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题