我正在编写一个谷歌内容脚本,我的程序需要向服务器进行大约30次AJAX调用.我正在使用JQuery的.when函数与.apply一起将数组传递给.when函数.我也在使用.done,我希望能够传入一个参数数组,这些参数将从.when函数中获取延迟对象.有没有办法做到这一点?这就是我想要做的.
var callback = function(a) {
console.log("done",a);
};
var requests = [];
var requestArray = [];
for(i = 0; i < liclass.length; i++) {
requests.push($.ajax({
url: liclass[i],success: function() {;
}
}));
var str = "messageArg" + i
requestArray.push(str)
}
$.when.apply($,requests).done(function(requestArray){
callback(requestArray)});
解决方法
如果你看一下
examples for
$.when,你会看到回调被传递给每个promise的参数.如果该promise来自Ajax调用,那么每个参数都是[data,statusText,jqXHR]形式的数组.
所以你只需迭代参数并提取第一个元素. $.map使这很容易:
$.when.apply($,requests)
.then(function() {
return $.map(arguments,function(v) {
return v[0];
});
})
.done(callback);