2012-10-31 63 views
61

應該使用哪一個?調用jquery ajax - .fail vs.:error

是否有任何理由使用一個而不是另一個?

錯誤處理更好嗎?

$.ajax({ 
    url: url, 
    data: { start: start, end: end } 
}).done(function(data, textStatus, jqXHR) { 
    $('#myElement').append(data); 
}).fail(function() { 
    // report error  
}); 

OR

$.ajax({ 
    url: url, 
    data: { start: start, end: end }, 
    success: function(data, textStatus, jqXHR) { 
     $('#myElement').append(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     // report error 
    } 
}); 

回答

36

兩個選項是等價的。

但是,承諾式接口(.fail().done())允許您將處理響應的代碼與創建請求的代碼分開。

您可以編寫一個函數發送一個AJAX請求並返回jqXHR對象,然後在其他地方調用該函數並添加一個處理程序。

當與.pipe()功能相結合,承諾式的界面還可以幫助做多個AJAX時減少嵌套調用:

$.ajax(...) 
    .pipe(function() { 
     return $.ajax(...); 
    }) 
    .pipe(function() { 
     return $.ajax(...); 
    }) 
    .pipe(function() { 
     return $.ajax(...); 
    }); 
+24

「從jQuery 1.8開始,不推薦使用deferred.pipe()方法,而應該使用替代它的deferred.then()方法。」 http://api.jquery.com/deferred.pipe/ – richardaday

25

剛剛梳洗這件事......

的成功和錯誤方法從jQuery 1.8開始已被棄用。

jQuery Ajax

棄用注意:該jqXHR.success(),jqXHR.error(),和jqXHR.complete()回調棄用的jQuery 1.8。要準備代碼以便最終刪除它們,請改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

+6

這實際上是對'jqXHR'對象的'error()'的棄用,而不是'$ .ajax'本身,這是用戶所指的。 –

+1

@AdamGrant,'$ .ajax' _returns_ a'jqXHR',所以@slohr是正確的。 –

+5

你說得對。我應該改寫我的評論,對'success'和'error'的棄用不適用於傳遞給'$ .ajax()' –