2014-03-27 36 views
6

我正在使用Angular $資源向我的控制器發出請求,並在Spring應用程序上實現。 當控制器返回一個Integer值時,$ resource解析它不好。 使用Firebug檢查它,我得到的東西,如:

Resource { 0="1", 1="9", 2="1", more...} 

,其中191只是intger值服務器返回。 其他複雜對象沒有問題(由服務器在JSON中解析)。 建議? 謝謝 FB

回答

0

在$ resource方法定義中設置isArray: false

0

也許嘗試在動作的配置設置responseType,就像這樣:

$resource(url, {}, { 
    get: { 
     method: 'GET', 
     responseType: 'text' 
    } 
}); 

如果不工作,你可能需要使用transformResponse或$ HTTP攔截的資源得到了之前修改響應持有它。 See $http docs

+0

這不起作用。 – ach

4

我知道這有點舊,但我遇到了類似的問題,有人指出我在正確的方向。

如果你的服務器發回一個JSON編碼的響應,但你只傳遞給它一個值(在你的情況下爲191),$ resource似乎將它解釋爲一個字符串,然後將它分解成一個個體數組字符(我不是100%的技術細節爲什麼,但那是我的經驗)。所以你需要做的是發回你的包裝在JSON對象中的值。

所以,與其做這樣的事情:

function callback(req, res) { 
    var number = 191; // this is just for example purposes 
    res.json(number); 
} 

你需要做的是這樣的:

function callback(req, res) { 
    var number = 191; // again, just for an example 
    res.json({ value: number }); 
} 

那麼當你$資源調用回來,只是獲得響應的value財產你應該很好走。

P.S.這裏的示例基於Node/Express後端,而不是Spring,但我認爲這仍然適用。

+0

這實際上解決了我的問題,我提供res.json與JSON對象而不是JSON對象的字符串。 –

0

我實際上發現這是整數,字符串和布爾值的問題。

如果您正在使用的WebAPI,做這樣的:

public object ControllerMethod(<PARAMS>) 
{ 
    <LOGIC> 
    return new { value = <PUT YOUR VALUE HERE> }; 
} 

如果節點上,使用CodeLander的答案。

在你的Angular代碼中,你只需要得到返回值的.value。