var xhr1 = $.ajax({ url:'/echo/json/', data:{ delay: 3 } }),
xhr2 = $.ajax({ url:'/echo/json/something/invalid', data:{ delay: 3 } });
xhr1.always(function(){
console.log('xhr1 always');
});
xhr2.always(function(){
console.log('xhr2 always');
});
$.when.apply($, [xhr1, xhr2]).always(function(){
console.log('xhr1 & xhr2 always');
});
结果(控制台):
xhr2 always
xhr1 & xhr2 always
xhr1 always
为什么deferred.always()
不等待两个ajax调用都完成?是否有任何延迟回调可以在所有请求完成后使用,无论其状态如何?
答案 0 :(得分:4)
当{em>所有 <{1}}时,.when(...)
会触发回调,或者只要其中任何 resolved
}。
由于第二次AJAX调用导致错误,一旦第二次AJAX调用错误发生,rejected
就会发生,无论第一次AJAX调用是否成功。
我知道的唯一解决方案是为每个AJAX请求保留第二个.when().always()
,然后在每个AJAX请求的$.Deferred
处理程序中resolve
。然后在always
电话中使用那些延迟:
$.when