2011-05-11 60 views
25

我试图让我的JSON从我的控制器到我的视图。在我的控制器我做:Rails中奇怪的JSON Javascript问题

@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和在控制器内使用respond_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),它给了我一个非法的令牌错误。

有人可以帮助我吗?非常感谢!

回答

48

这是Rails的编码的HTML,你的字符串是默认的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

非常感谢!现在它出现在它应该是的源头中。如果你不介意,你能举个例子说明我如何访问JSON中的每个对象?我真的很感激它! – readmymsg123 2011-05-11 21:14:13

+0

没关系。我知道了。非常感谢!!! – readmymsg123 2011-05-11 21:19:40

+0

不错!对不起,我没有早点回复。 – Laas 2011-05-12 12:24:53

0

我想你需要把它引号,然后你可以要求jquery将字符串解析成JSON。