2015-10-12 25 views
1

所以,我有我建立這看起來像這樣的哈希:從軌控制器發送JSON對象爲Javascript

Track_list = {:track1=>{:url=>"https://open.spotify.com/track/2Oehrcv4Kov0SuIgWyQY9e", :name=>"Demons"}, 
:track2=>{:url=>"https://open.spotify.com/track/0z8yrlXSjnI29Rv30RssNI", :name=>"Shots - Broiler Remix"}, 
:track3=>{:url=>"https://open.spotify.com/track/6Ep6BzIOB9tz3P4sWqiiAB", :name=>"Radioactive"}, 
:track4=>{:url=>"https://open.spotify.com/track/3I05foFixB2sSZvV5Ppty8", :name=>"Blank Space/Stand By Me - Medley/Live From Spotify London"}, 
:track5=>{:url=>"https://open.spotify.com/track/4G8gkOterJn0Ywt6uhqbhp", :name=>"Radioactive"}} 

,我試圖給散列轉換成JSON這樣我就可以使用它我JS文件,這是我在我的控制器那樣:

@tl = track_list.as_json 
# and it produces a result like this: 
# {"track1"=>{"url"=>"https://open.spotify.com/track /2Oehrcv4Kov0SuIgWyQY9e", "name"=>"Demons"}, 
# "track2"=>{"url"=>"https://open.spotify.com/track/0z8yrlXSjnI29Rv30RssNI", "name"=>"Shots - Broiler Remix"}, 
# "track3"=>{"url"=>"https://open.spotify.com/track/6Ep6BzIOB9tz3P4sWqiiAB", "name"=>"Radioactive"}, 
# "track4"=>{"url"=>"https://open.spotify.com/track/3I05foFixB2sSZvV5Ppty8", "name"=>"Blank Space/Stand By Me - Medley/Live From Spotify London"}, 
# "track5"=>{"url"=>"https://open.spotify.com/track/4G8gkOterJn0Ywt6uhqbhp", "name"=>"Radioactive"}} 

然而,當我去我的JS文件,並嘗試打印出來的文件,這是我得到:

console.log("<%= @tl %>"); 
"{&quot;track1&quot;:{&quot;url&quot;:&quot;https://open.spotify.com/track/2Oehrcv4Kov0SuIgWyQY9e&quot;,&quot;name&quot;:&quot;Demons&quot;},&quot;track2&quot;:{&quot;url&quot;:&quot;https://open.spotify.com/track/0z8yrlXSjnI29Rv30RssNI&quot;,&quot;name&quot;:&quot;Shots - Broiler Remix&quot;},&quot;track3&quot;:{&quot;url&quot;:&quot;https://open.spotify.com/track/6Ep6BzIOB9tz3P4sWqiiAB&quot;,&quot;name&quot;:&quot;Radioactive&quot;},&quot;track4&quot;:{&quot;url&quot;:&quot;https://open.spotify.com/track/3I05foFixB2sSZvV5Ppty8&quot;,&quot;name&quot;:&quot;Blank Space/Stand By Me - Medley/Live From Spotify London&quot;},&quot;track5&quot;:{&quot;url&quot;:&quot;https://open.spotify.com/track/4G8gkOterJn0Ywt6uhqbhp&quot;,&quot;name&quot;:&quot;Radioactive&quot;}}" 

,當我嘗試做的事:

console.log(JSON.parse("<%= @tl %>"); 

它不工作。我也試過把j放在@tl的前面,它給了我錯誤,說hash不能用於gsub。

此外,當我嘗試這樣做:

@track_list = JSON.generate(@tl) # from above 

我得到這個:

"{\"track1\":{\"url\":\"https://open.spotify.com/track/2Oehrcv4Kov0SuIgWyQY9e\",\"name\":\"Demons\"},\"track2\":{\"url\":\"https://open.spotify.com/track/0z8yrlXSjnI29Rv30RssNI\",\"name\":\"Shots - Broiler Remix\"},\"track3\":{\"url\":\"https://open.spotify.com/track/6Ep6BzIOB9tz3P4sWqiiAB\",\"name\":\"Radioactive\"},\"track4\":{\"url\":\"https://open.spotify.com/track/3I05foFixB2sSZvV5Ppty8\",\"name\":\"Blank Space/Stand By Me - Medley/Live From Spotify London\"},\"track5\":{\"url\":\"https://open.spotify.com/track/4G8gkOterJn0Ywt6uhqbhp\",\"name\":\"Radioactive\"}}" 

所以它實際上是正確逃避一切......我不知道爲什麼,當我在我的JS文件中使用相同的變量,它不會轉義引號或任何內容。

謝謝!

回答

1

試試這個:

console.log("<%= @tl.to_json.html_safe %>"); 
+1

OMG,你真了不起。爲什麼html_safe工作?實際上做了什麼> – aBrokenSniper

+1

有時,ERB可能會逃避JSON,因爲它認爲它不是HTML安全的。所以,當你使用'html_safe'時,它就可以工作。 –

0

試試這個:

var my_obj = <%= j @tl %>; 
console.log(my_obj); 

你只是有幾個小問題。您需要在您的視圖中使用escape_javascript(或其別名j)。但是,你也堅持引號之間的json對象,這將導致瀏覽器將它視爲一個字符串而不是一個json對象。