所以XHR在一个循环中运行,我希望在所有XHR完成后执行一个函数,我尝试使用promises如下。
var promises = [];
for(var i=0;i<5;i++){
promise = $.ajax({
type: "POST",
url : data_url,
data:pdata
});
promises.push(promise);
}
$.when(promises).then(function(){
window.location.href = '/cart?edit_order=true'
})
问题是重定向发生在AJAX完成之前,我错过了什么?
答案 0 :(得分:2)
如果我没记错的话,jQuery的.when()
方法并不接受promises的 Array 作为参数,而是接受单个参数。这只是意味着你需要改变调用它的方式:
$.when.apply( null, promises ).then(function(){
window.location.href = '/cart?edit_order=true'
})
使用Function.prototype.apply
将自动获取数组并将 Array 的每个值作为单个参数放入调用的函数中,在本例中为{{1 }}。有效地传播论据。
您还可以执行一些EMCAscript魔术并为此创建一个部分应用程序:
.when()
..然后只需致电
var when = Function.prototype.apply.bind( $.when, null );