2011-05-11 36 views
25

Tôi đang cố gắng để có được JSON của tôi từ bộ điều khiển của tôi để xem của tôi. Trong điều khiển của tôi, tôi đang làm:Vấn đề Javascript JSON lạ trong Rails

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

Theo quan điểm của tôi, tôi đã cố gắng:

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

và tất cả những cung cấp cho tôi một lỗi. Tôi thường nhận được một "Unexpected Syntax Error &" or "Unexpected Syntax Error {"

Tôi cũng đã thử sử dụng jquery và sử dụng respond_to trong bộ điều khiển, nhưng điều đó dường như không hoạt động.

những suy nghĩ của tôi là rằng nhận json đến xem không phải là một vấn đề lớn và không nên đòi hỏi jQuery, và hiện nay, nguồn trang của tôi trông giống như:

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 

Tôi không hiểu được & ký quot (có lẽ thats nơi lỗi cú pháp xuất phát từ) nhưng khi tôi render: json => @nodes.to_json, trang này hiển thị một json bình thường đó là hợp lệ:

[{"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}} 

Lưu ý: tôi cũng đã thử làm var stuff = '<%= @json.to_json%> nhưng khi tôi làm var json = JSON.parse(stuff), nó mang lại cho tôi một lỗi mã thông báo bất hợp pháp.

Ai đó có thể giúp tôi với điều này không? Cám ơn rất nhiều!

Trả lời

48

Đây là Rails html mã hóa chuỗi của bạn như là mặc định trong Rails 3.

Bạn cần phải đánh dấu JSON của bạn như html_safe:

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

Lưu ý rằng .to_s là cần thiết vì as_json cho Hash thay vì chuỗi. Bạn có thể thực hiện việc này thay thế:

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

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

Cảm ơn rất nhiều! Bây giờ nó xuất hiện trong nguồn như nó được cho là. Nếu bạn không phiền, bạn có thể cho tôi một ví dụ về cách tôi có thể truy cập từng đối tượng trong JSON không? Tôi thực sự sẽ đánh giá cao nó! – readmymsg123

+0

Nevermind. Tôi đạt được rồi. Cám ơn rất nhiều!!! – readmymsg123

+0

Tuyệt vời! Xin lỗi, tôi không trả lời sớm hơn. – Laas

0

Tôi nghĩ bạn cần đặt dấu ngoặc kép xung quanh nó, sau đó bạn có thể yêu cầu jquery phân tích cú pháp chuỗi thành JSON.

Các vấn đề liên quan