Я сохраняю переменное число обещаний ajax в массиве. И когда все обещания сделать мне что-то другое:
$.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), я получаю следующую ошибку js, когда есть более одного обещания ajax. Он отлично работает с одним обещанием:
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/ –