1

我似乎无法处理 jQuery$.Deferred对 AJAX 调用的处理。

我要做的是执行三个 AJAX 调用,每个调用都对返回的数据进行一些处理。第三次AJAX调用的成功调用需要前两次调用的处理完成,但前两次调用的顺序无关紧要。

这是我的代码和一个 jsFiddle

var firstAjax = $.getJSON('/echo/json/')
.done(
    function(data, textStatus, jqXHR){
        //do some initialization here based on the data
        alert(1);
        return jqXHR.promise();
    }
);

var secondAjax = $.getJSON('/echo/json/')
.done(
    function(data, textStatus, jqXHR){
        //do some initialization here based on the data
        alert(2);
        return jqXHR.promise();
    }
);

$.when(firstAjax, secondAjax)
.done(
    $.getJSON('/echo/json/')
    .done(
        function(data, textStatus, jqXHR){
            //do some initialization here that relies on the initialization of the first and second calls being complete
            alert(3);
        }
    )
);

有时,但并非总是如此,“3”会在“1”和“2”之前发出警报。我对立即执行第三个 AJAX 调用没有问题,但它的完成处理程序需要最后执行。

4

1 回答 1

1

你可以做

var firstAjax = $.getJSON('/echo/json/').done(
function(data, textStatus, jqXHR){
    //do some initialization here based on the data
    alert(1);
    return jqXHR.promise();
}
);

var secondAjax = $.getJSON('/echo/json/')
.done(
function(data, textStatus, jqXHR){
    //do some initialization here based on the data
    alert(2);
    return jqXHR.promise();
}
);

$.when(firstAjax, secondAjax)
.done(function(){ 
 $.getJSON('/echo/json/')
.done(
    function(data, textStatus, jqXHR){
        //do some initialization here that relies on the initialization of the first and second calls being complete

  alert(3);
    }
)

});    

你错过了这一行 $.when(firstAjax, secondAjax).done(function(){
http://jsfiddle.net/ACBJs/1/上的“function(){”

于 2013-07-10T18:30:52.417 回答