2015-02-10 66 views
1

我的多字字符串在DOM中沒有正確解釋。如何通過多字符串確保從服務器到HTML的JSON完整性?Ruby中的JSON多字符串在HTML中呈現錯誤

在Rails控制器中,我將一個JSON對象存儲在一個變量中。當我檢入服務器日誌時,該對象格式正確。然後通過erb將該變量傳遞給視圖中的數據屬性。但是,生成的HTML不正確。

# in the controller 
@hash = {'subhash' => {'single' => 'word', 'double' => 'two words' } }.to_json 
puts @hash.inspect 

# output in the server log 
=> "{\"subhash\":{\"single\":\"word\",\"double\":\"two words\"}}" 

# view.html.erb 
<section data-hash=<%= @hash %> ></section> 

# generated html, 'double' value is incorrect 
<section data-hash="{"subhash":{"single":"word","double":"two" words&quot;}}> 

# complete data value is not obtainable in the console 
> $('section').data().hash 
< "{"subhash":{"single":"word","double":"two" 

更新

# adding html_safe does not help 
{"subhash" => {"single" => "word", "double" => "two words" } }.to_json.html_safe 

# results in 
"{"subhash":{"single":"word","double":"two" words"}} 
+0

您是否已將'.html_safe'添加到最後? – 2015-02-10 22:34:01

+0

是的。它使它看起來更好一些,但實際上並沒有解決問題。 – steel 2015-02-10 22:36:18

+0

通過查看Chrome檢查。 – steel 2015-02-10 23:14:34

回答

3

如果你把你過去的 「HTML」 的瀏覽器的解釋,並直接查看源代碼,你應該看到這樣的事情:

<section data-hash={&quot;subhash&quot;:{&quot;single&quot;:&quot;word&quot;,&quot;double&quot;:&quot;two words&quot;}}> 

在至少那是我用Rails4.2得到的。這也給了我在DOM檢查器中查看HTML時看到的相同結果。

的瀏覽器看到的是如下:

<section data-hash={"subhash":{"single":"word","double":"two words"}}> 

,並試圖理解它的HTML但沒有意義的HTML所以瀏覽器只是被混淆。

如果添加了外引號自己:

<section data-hash="<%= @hash %>"> 
       ^  ^

那麼你會在HTML得到這樣的:

<section data-hash="{&quot;subhash&quot;:{&quot;single&quot;:&quot;word&quot;,&quot;double&quot;:&quot;two words&quot;}}"> 

和引號將被正確地解釋爲&quot;旨意可以看出作爲data-hash屬性的HTML編碼內容,而不是對HTML屬性的奇怪外觀嘗試。

+0

這個技巧。謝謝! – steel 2015-02-11 00:40:22

+0

是的,它工作的很好http://jsfiddle.net/estuqq26/ :) – equivalent8 2015-02-20 16:42:56

+0

http://www.eq8.eu/blogs/12-json-array-in-html-element-data-attribute – equivalent8 2015-02-20 17:37:23