2012-08-03 550 views
0

我在CoffeeScript的的CoffeeScript總是返回響應對象

getSection = (url) -> 
    req = $.getJSON url 
    return req.success (data) -> 
    data.section 

或以下代碼,

getSection = (url) -> 
    req = $.getJSON url 
    req.success (data) -> 
    data.section 

我打算返回data.section爲函數getSection。但它總是返回另一個對象(可能是響應/ ajax對象)。我如何強制從這個內部函數返回data.section中的值?

在此先感謝?

+0

你想從getSection返回,還是從成功回調? – Thilo 2012-08-03 06:52:45

回答

3

$.getJSON是一個AJAX調用和一個代表異步所以getSection將返回$.getJSON獲取其響應從服務器返回之前。基本上,你不能得到getSection返回data.section,除非你想用$.ajax替換$.getJSON並做一個同步(即非異步)的調用;然而,同步調用是邪惡的,並被棄用,所以你不應該使用它們。

通常的解決辦法是將回調傳遞給getSection

getSection = (url, callback) -> 
    req = $.getJSON url 
    req.success (data) -> 
    callback(data.section) 

,然後你把你的邏輯callback而不是試圖做的getSection返回值的東西。

您的getSection正在返回req,因爲req.success返回並且CoffeeScript函數返回它們的最終值。

+0

感謝您的迴應!我真的忘了在getJSON完成之前getSection會返回!正如我現在知道的原因,我會做一些工作。 – HungryCoder 2012-08-03 08:07:06

+0

是的,我已經編寫了一個函數,可以在數據從getJSON中加載並從成功回調中調用該函數之後完成工作,非常類似於您展示的方式:)。謝謝 – HungryCoder 2012-08-03 15:06:02