2015-10-12 3 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, и он дал мне ошибку, говоря, что хэш не может использоваться с 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-объекта.

Смежные вопросы