我在數組中保留了可變數量的ajax promise。 而當所有的承諾都做到我做別的事情:
$.when.apply($, promises).then(function(){
var myArgs = [];
if(promises.length == 1){
var myArgs = [];
myArgs[0] = arguments;
}else{
myArgs = arguments;
}
for(i=0; i<myArgs.length; i++){
fileArr[promise2File[i]]['prop1'] = myArgs[i][0].type;
fileArr[promise2File[i]]['prop2'] = myArgs[i][0].message;
}
});
當我使用jQuery 1.6.1版本,它完美的作品。但是,當我切換到更新版本(1.8.3)時,如果有多個ajax承諾,我會收到以下js錯誤。它的工作原理罰款單承諾:
Uncaught TypeError: Object [object Object] has no method 'progress'
我查了promisses變量的類型,以確保它是陣列(陣列的instanceof),它是。
在情況下,它是有幫助的,這是我如何填寫承諾陣列:
var i = 0;
for(var file in fileArr){
if (fileArr.hasOwnProperty(file)){
if(fileArr[file].hasOwnProperty('status')){
if($.inArray(fileArr[file]['status'], ['held','submitted']) !== -1){
promise2File[i] = file; // I need this to map each promise to the corresponding file
promises[i] = parent.myFunc('cancel', [file], false); //myFunc returns the ajax promise
i++;
}
}
}
}
任何思考爲什麼我收到jQuery的較新版本的這個錯誤?
使用.done代替。那麼,它的功能在jQuery中的更高版本的改變。 http://api.jquery.com/deferred.then/ –