2011-05-11 3 views
25

Я пытаюсь получить мой JSON от моего контроллера к моему представлению. В моем контроллере я делаю:Weird JSON Проблема Javascript в Rails

@nodes = Node.all 
@json = @nodes.as_json(:only => [:ID, :Lat, :Lon]) 

На моем взгляде, я попробовал:

1) var stuff = <%= @json %> 
2) var stuff = <%= @json.to_json %> 
3) var stuff = <%= @json.to_json.to_json %> 

и все тех, кто дает мне ошибку. Обычно я получаю "Unexpected Syntax Error &" or "Unexpected Syntax Error {"

Я также пытался использовать jquery и использовать response_to внутри контроллера, но это тоже не работает.

Мои мысли, что получение JSON к мнению, не должно быть большой проблемой и не требует JQuery, и в настоящее время, мой исходный код страницы выглядит следующим образом:

var stuff = [{&quot;node&quot;:{&quot;ID&quot;:1301499692582,&quot;Lat&quot;:42.3605063113369,&quot;Lon&quot;:-71.0870862191138}},{&quot;node&quot;:{&quot;ID&quot;:1301499691515,&quot;Lat&quot;:42.3605147089149,&quot;Lon&quot;:-71.0870533282532}},{&quot;node&quot;:{&quot;ID&quot;:1301431075499,&quot;Lat&quot;:42.3605456103,&quot;Lon&quot;:-71.0875239075536}} etc 

Я не понимаю & Quot символы (возможно, тот, где синтаксическая ошибка происходит из), но когда я вынести: json => @nodes.to_json, страница делает нормальный JSON, который действителен:

[{"node":{"ID":1301499692582,"Lat":42.3605063113369,"Lon":-71.0870862191138}},{"node":{"ID":1301499691515,"Lat":42.3605147089149,"Lon":-71.0870533282532}},{"node":{"ID":1301431075499,"Lat":42.3605456103,"Lon":-71.0875239075536}} 

Примечание: Я также пытался делать var stuff = '<%= @json.to_json%> но когда я do var json = JSON.parse(stuff), это дает мне незаконную ошибку токена.

Может кто-нибудь, пожалуйста, помогите мне с этим? Спасибо!

ответ

48

Это Rails HTML-кодирующий ваша строку как по умолчанию в Rails 3.

Вы должны отметить свой JSON в html_safe:

var stuff = <%= @json.to_s.html_safe %> 

.to_s Обратите внимание, что необходимо, потому что as_json дает Hash вместо строка. Вы можете сделать это вместо этого:

# in controller 
@json = @nodes.to_json(:only => [:ID, :Lat, :Lon]) 

#and in view 
var stuff = <%= @json.html_safe %> 
+0

Большое спасибо! Теперь он появляется в источнике, как предполагалось. Если вы не возражаете, не могли бы вы привести мне пример того, как я могу получить доступ к каждому объекту в JSON? Я бы по достоинству оценил это! – readmymsg123

+0

Nevermind. Я понял. Спасибо!!! – readmymsg123

+0

Ницца! Извините, что я не отвечаю раньше. – Laas

0

Я думаю, вам нужно поставить кавычки вокруг него, тогда вы можете попросить jquery проанализировать строку в JSON.