我似乎无法处理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处理程序需要最后执行。
答案 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/