2012-08-23 46 views
1

這兩個代碼(1)(2)似乎對我的工作方式相同。

我的問題是:
1)這兩個代碼是否相同?
2)如果是,爲什麼?如果不是,我應該更喜歡什麼,爲什麼?


(1)

$.ajax({ 
    url: backendRouter.generate('feedback_send'), 
    type: 'POST', 
    dataType: 'json', 
    data: data 
    success: callback, 
    done: function() { 
     // some code 
    } 
}); 

(2)

$.ajax({ 
    url: backendRouter.generate('feedback_send'), 
    type: 'POST', 
    dataType: 'json', 
    data: data 
    success: callback 
}).done(function() { 
    // some code 
}); 
+0

這篇文章可能有助於你一些好的信息:http://stackoverflow.com/questions/8847829/what-is-diffrence-between-success-and-done-method -of-ajax –

回答

3

是,兩個代碼是等價的,但(誤?)你離開success: callback在後者。

但恕我直言,後者是首選,因爲延期對象比直接給$.ajax提供回調靈活得多。

特別是,使用延遲對象允許在啓動AJAX調用和處理該調用的結果之間更好地分離邏輯和責任。另外,某些AJAX幫助函數不支持error回調。如果我寫:

function doAjax() { 
    return $.get(...); 
} 

我可以再附上的donefail處理任意數字至結果是函數調用的,而不必處理那些傳遞到doAjax功能。

我也可以使用$.when()$.pipe()等其他承諾結合起來,返回promise()對象,多個異步事件之間非常強大的同步(包括其他AJAX調用,定時器,動畫等)。我不能做,使用success:

+0

+1謝謝你的回答。實際上,與你的回覆相關我打開了另一個問題[如何間諜茉莉花jQuery AJAX請求?](http://stackoverflow.com/questions/12088029/how-to-spy-jquery-ajax-request-with-jasmine)。你能看看,謝謝。 –