2011-05-11 12 views
25

Estoy tratando de obtener mi JSON de mi controlador para mi vista. En mi controlador que estoy haciendo:Problema extraño de JSON Javascript en Rails

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

En mi punto de vista que he intentado:

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

y todos los que me dan un error. Normalmente obtengo un "Unexpected Syntax Error &" or "Unexpected Syntax Error {"

También he intentado usar jquery y usar responder_ dentro del controlador, pero eso tampoco parece funcionar.

Mis pensamientos son que conseguir JSON a la vista no debería ser un gran problema y no debería necesitar jQuery, y en la actualidad, mi fuente de la página que parece:

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 

Yo no puedo entender los símbolos quot & (tal vez eso es donde el error de sintaxis está viniendo), pero cuando lo haga render: json => @nodes.to_json, la página se representa un JSON normal que es válido:

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

Nota: también he intentado hacer var stuff = '<%= @json.to_json%> pero cuando do var json = JSON.parse(stuff), me da un error de token ilegal.

¿Alguien puede ayudarme con esto? ¡Muchas gracias!

Respuesta

48

Esta es Rieles html que codifica la cadena como es por defecto en Rails 3.

Es necesario marcar su JSON como html_safe:

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

Tenga en cuenta que se necesita .to_s porque as_json da Hash en lugar de cuerda. Usted podría hacer esto en su lugar:

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

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

¡Muchas gracias! Ahora aparece en la fuente como se supone que debe ser. Si no te importa, ¿podrías darme un ejemplo de cómo puedo acceder a cada objeto en el JSON? ¡Le agradeceria que verdaderamente! – readmymsg123

+0

No importa. Entiendo. ¡¡¡Muchas gracias!!! – readmymsg123

+0

¡Agradable! Lo siento, no pude responder antes. – Laas

0

Creo que necesitas poner comillas alrededor, entonces puedes pedirle a jquery que analice la cadena en JSON.

Cuestiones relacionadas