2011-05-11 18 views
25

Sto cercando di ottenere il mio JSON dal mio controller alla mia vista. Nel mio controller sto facendo:Weird JSON problema con Javascript in Rails

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

A mio avviso ho provato:

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

e tutti coloro che mi danno un errore. Di solito ottengo un

Ho anche provato ad usare jquery e usare respond_to all'interno del controller, ma non sembra funzionare neanche.

I miei pensieri sono che ottenere JSON per la vista non dovrebbe essere un grosso problema e non richiede jQuery, e attualmente, la mia fonte pagina appare come:

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 

Non capisco le & simboli quot (forse questo è dove l'errore di sintassi viene da), ma quando lo faccio di rendering: json => @nodes.to_json, la pagina esegue il rendering di un jSON normale che è valida:

[{"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: ho anche provato a fare var stuff = '<%= @json.to_json%> ma quando ho fare var json = JSON.parse(stuff), mi dà un errore token illegale.

Qualcuno può aiutarmi con questo? Grazie mille!

risposta

48

Si tratta di Rails HTML-codifica la stringa come è di default in Rails 3.

È necessario contrassegnare la JSON come html_safe:

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

Si noti che è necessario perché .to_sas_json dà Hash invece di stringa. Puoi farlo invece:

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

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

Grazie mille! Ora si presenta nella sorgente come dovrebbe essere. Se non ti dispiace, potresti darmi un esempio su come posso accedere ad ogni oggetto nel JSON? Lo apprezzerei davvero! – readmymsg123

+0

Non importa. Capito. Grazie mille!!! – readmymsg123

+0

Bello! Scusa, non posso rispondere prima. – Laas

0

Penso che sia necessario inserire virgolette, quindi è possibile chiedere a jQuery di analizzare la stringa in JSON.