Странная проблема JSON Javascript в Rails - PullRequest
27 голосов
/ 12 мая 2011

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

@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%>, но когда я делаю var json = JSON.parse(stuff), это дает мне недопустимую ошибку токена.

Может кто-нибудь помочь мне с этим? Большое спасибо!

Ответы [ 2 ]

52 голосов
/ 12 мая 2011

Это html-кодировка Rails вашей строки, как это по умолчанию в Rails 3.

Вам нужно пометить JSON как html_safe:

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

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

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

#and in view
var stuff = <%= @json.html_safe %>
0 голосов
/ 12 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...