ajax回调函数按顺序排列

时间:2017-03-01 05:52:06

标签: jquery ajax

我尝试在函数(a)完成后调用函数(b)。 但是在功能(a)完成之前出现警报消息。 你的出色解决方案将受到尊重。

$.ajax({
    url : "action.do",
    .....code....
}).done(function(a){

    ...code...

}).then(function(b){

    alert("hello");

});

3 个答案:

答案 0 :(得分:1)

done不能像正确的承诺then函数那样工作。要执行此操作,您需要使用then,并确保从ajax电话中返回承诺,例如:

$.ajax({
    url : "action.do",
    // .....code....
}).then(function(a){
// ^^^^
    return $.ajax({
//  ^^^^^^
        url : "action.do",
        // .....code....
    });
}).then(function(b){
    alert("hello");
});

我相信你至少需要jQuery v1.8,但仔细检查你正在使用的版本,在多个版本中有很多工作来制作jQuery的Deferred并且承诺与承诺/ A +规范和(因此)ES2015(又名“ES6”)规范的承诺。

答案 1 :(得分:-1)

因为then()总是在.done()

之前

.done()只有一个回调,它是成功回调

.then()同时有成功和失败的回调

答案 2 :(得分:-1)

.then()用于操纵承诺。它有2个回调,成功和失败。这样做是.then()的成功回调函数。

您可以通过以下两种方式修改代码:

$.ajax({
    url : "action.do",
    .....code....
}).done(function(a){

    ...code...
    alert("hello");
});

$.ajax({
    url : "action.do",
    .....code....
}).then(function(b){

    alert("hello");

});

理想情况下.then()类似于以下代码:

.then(function(){
    ...success case...(.done() scenario)
},function(){
    ...failure case... (.fail() scenario)
});