jquery $。使用版本1.8.3时出错

时间:2014-01-10 22:34:48

标签: jquery ajax deferred

我在数组中保留了可变数量的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错误。它只需一个承诺即可正常工作:

  

未捕获的TypeError:对象[object Object]没有方法'progress'

我检查了promisses变量的类型以确保它是数组(使用instanceof Array)并且它是。

如果它有用,这就是我填充promises数组的方式:

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上收到此错误?

1 个答案:

答案 0 :(得分:2)

在jQuery 1.8中,该.then版本被删除并替换为一个不接受完成/失败回调的版本,接受完成/失败过滤器。

http://api.jquery.com/deferred.then/

从.then更改为.done可以解决您的问题。

$.when.apply($, promises).done(function(){ 
1.8之后的

.then与1.8之前的.pipe基本相同