用jQuery延迟链接AJAX处理程序

时间:2013-07-10 18:18:49

标签: javascript jquery jquery-deferred

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

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

这是我的代码,a 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调用的问题,但它的done处理程序需要最后执行。

1 个答案:

答案 0 :(得分: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);
    }
)

});    

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