2013-02-18 50 views
5

據我所知the documentation,有兩種不同的方式來處理來自$.ajax()調用的響應。jquery ajax:何時使用回調鉤子vs設置函數?

1)帶通入$.ajax()的設置功能對象:

$.ajax({ 
    success: function(){ ... }, 
    error: function(){ ... } 
}); 

2)環連接「回調掛鉤」

$.ajax({...}) 
    .done(function(){ ... }) 
    .fail(function(){ ... }) 

之間有什麼重要的區別這兩種方法,我應該什麼時候選擇一種?

回答

1

如果您在呼叫中直接附加該功能,則使用情況沒有太大區別。當你想在其他地方使用回調函數時會產生差異。

發送回調函數進入一個方法:

function callForMe(callback) { 
    $.ajax({ 
    url: '...', 
    success: callback 
    }); 
} 

callForMe(function(data){ 
    // handle the response 
}); 

返回從方法的承諾,等待以後的響應:

function callFormMe() { 
    return $.ajax({ 
    url: '...' 
    }); 
} 

var promise = callForMe(); 
// later on: 
promise.done(function(data){ 
    // handle the response 
}); 
+0

回想起來,這應該是顯而易見的,我想......但感謝您的清晰解釋和例子。 – 2013-02-18 22:48:20

1

總是使用新的延遲對象(即可鏈式的.done,.fail等)版本,儘管在很多情況下沒有代碼長度的保存。

原因是它允許我從去耦合從後續處理響應中產生AJAX調用的細節。

解耦允許我:

  1. 抽象掉數據從數據處理獲取
  2. 添加多個處理程序,即使在AJAX調用完成
  3. 使用.fail上沒有這樣的AJAX輔助處理器error:參數
  4. 使用.pipe在將數據傳遞給其他處理程序之前對其進行後處理
  5. 同步與其他異步事件的onise

和所有沒有必要直接傳遞迴調到AJAX調用。

請參閱this answer其中我給出了更多具體實例的好處。

+0

只是要評論並問@Guffa是否同意這個約定。對我而言,記憶一種用法比兩種用法要容易得多。 你能想到任何會對其他方法有明顯益處的情況嗎?如果沒有,我會和你一起上船。 – 2013-02-18 22:52:40

+0

延遲方法對舊風格有許多好處,它可以讓你做一些你無法輕易處理的舊成功風格處理程序。 – Alnitak 2013-02-18 22:54:39

+0

太好了,剛剛閱讀[你的其他答案](http://stackoverflow.com/a/14754681/6782)​​太(+1),好東西。 TIL – 2013-02-18 22:55:17