2014-01-10 66 views
0

我在數組中保留了可變數量的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的較新版本的這個錯誤?

+2

使用.done代替。那麼,它的功能在jQuery中的更高版本的改變。 http://api.jquery.com/deferred.then/ –

回答

2

在jQuery 1.8中,該版本的.then被刪除並替換爲不接受完成/失敗回調的接受完成/失敗過濾器。

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

從。後來到.done更改應該解決您的問題。

$.when.apply($, promises).done(function(){ 

.then 1.8之後是基本相同.pipe之前1.8

+0

凱文,這都是真實的,但它解釋錯誤消息「未捕獲TypeError:對象[對象對象]沒有方法'進度'」?也許我很笨,但我看不到它。 –

+0

用'.then()'作爲鏈的最後一個方法,它是否是前/後1.8是不是學術? –

+0

對我來說,'parent.myFunc()'返回一個由jQuery以外的lib生成的promise的可能性更大,1.8版本在某種程度上更容忍它。 –

相關問題