2013-03-28 34 views
3

我試圖將json對象保存到gsp頁面中的data-字段。Grails - 將JSON /地圖對象傳遞給客戶端

模擬控制器:

def test(){ 
    ['comments': ["1": 1, "3":40 ] ] 
} 

GSP(我也試過(comments as JSON)

<%@ page import="grails.converters.JSON" %> 
<div class='findme' data-comments="${comments as JSON}"> 

結果:

<div class='findme' data-comments="{" 1":1,"3":40}"> 

正如你所看到的報價都搞砸了。我嘗試使用encodeAsHTML,但它沒有奏效。

回答

2

我發現了一些方法來做到這一點。

<div class='findme' data-comments="${(new JSON(comments)).toString().encodeAsURL()}"> 

然後,我必須把它拉出來,如:

JSON.parse(unescape($('.findme').data('comments'))) 

找到另一種方式來做到這一點,但如果你在它「有什麼,有一個它會引起問題我。覺得編碼是要走的路

${(comments as JSON).toString().replace("\"", "'")} 
+0

我還沒有嘗試過,但我想,你也可以這樣做:$ {(評論爲JSON).encodeAsJavaScript() } –

+0

我剛剛嘗試過它(在Grails 2.2.3中),而且實際上您可以使用$ {(註釋爲JSON).encodeAsJavaScript()} 這會使用反斜槓轉義單引號和雙引號,因此您可以使用編碼的結果放在單引號或雙引號字符串中。 (''aa':11,'bb':/ two「two」o'clock /,'cc':33]將被編碼爲「{\」aa \「:11,\ 「bb \」:\「two \\\」two \\\「o \'clock \」,\「cc \」:33}「) –

+0

@SorinPostelnic你應該發佈一個額外的答案。 – Nix

3

我就遇到了這個最近也與兩種解決方案上來。

解決方案一:在模板中做到這一點:

<div class="comments" data-comments="${comments.encodeAsJSON().encodeAsHTML()}"> 

解決方案二:控制器中做到這一點:

def test(){ 
    ['comments': ["1": 1, "3":40 ] as JSON] 
} 

,並在模板中做到這一點:

<div class="comments" data-comments="${comments.encodeAsHTML()}"> 

我正在使用jQuery來進行解析。無論哪種解決方案,我都能得到JSON,如下所示:

$.parseJSON($('.comments').attr('data-comments')); 
0

我找到了一個簡單的方法來做到這一點。 首先,你做的事:

<div class="comments" data-comments="${comments.encodeAsJSON()}"> 

然後在javascript:

eval($('.comments').attr('data-comments')); 
相關問題