2012-12-08 133 views
0

我有以下代碼withhn模塊

var def = $.Deferred(); 

$.getJSON("http://localhost:62588/api/Values/getXMLData") 
.done(function(json){ 
     def.resolve($.parseJSON(json)); 
}); 

return def; 

然後我有那麼它完成,調用處理返回的數據之前,從另一個模塊調用它。

repository.getUserPolicies().done(function (userPolicies) { 
    process(userPolicies); 
}); 

這工作得很好,但我還不太瞭解延遲對象是如何工作的。

我讀過,你可以使用getJSON的延期對象,但不知道如果這正是我在這裏做的?

我想知道這種方法是否有缺點?

它可以做得更優雅嗎?

感謝

回答

6

不,這不是一個很好用的$.Deferred,如$.getJSON已經內置了承諾等jQuery中的較新版本的附加支持延期對象。

您可以使用內置的延遲對象,只返回Ajax調用,並附加done()功能直接:

var repository = { 
    getUserPolicies: function() { 
     return $.getJSON("http://localhost:62588/api/Values/getXMLData"); 
    } 
} 

repository.getUserPolicies().done(process); 

FIDDLE

+0

我想你錯過了一個重要的細節。你打算在每個完成的回調中調用'parseJSON'嗎?如果後來getUserPolicies會得到xml或bson(或其他)的響應呢? – meze

+0

這與問題無關,因爲'getUserPolicies'方法明確包含'$ .getJSON'調用,並且只檢索JSON。解析數據的邏輯似乎在'process()'函數中,所以這可能是找出如何處理返回的數據的地方,並且如果正在使用不同的格式,找出它接收的格式等。 – adeneo

+0

這是相關的。 'getUserPolicies'的用戶不應該關心該方法如何工作。我的第一個問題仍未得到解答。 – meze

相關問題