2011-05-11 12 views
0

私は私のレールコントローラから大きなJSONを持っている:JavascriptのRailsのJSON問題

@json = {:Nodes => @nodes.as_json(:only => [:ID, :Lat, :Lon])} 

と私は私の意見では、私はJavaScriptでそれを使用したいです。より広い範囲では、jsonを使用して、Googleマップ上にプロットするlatとlonを取得したいと考えています。しかし、今、私はちょうど私がすべてのポイントを適切に得ることができるかどうかを確認しようとしています。私の質問は:

javascriptファイルのjsonを解析するには、どのような方法が良いですか? (注:ファイルの拡張子はまだhtml.erbです)私は試しました:

var stuff = eval('(' + <%= @json %> + ')'); 

しかし、それは動作していないようです。誰も助けることができますか?本当にありがとう!

+0

:それはJSONの一部であることが想定されていないはObject(モデルのRails)を生成、あなたは次のようにオブジェクトに変換するために繰り返すことができますいずれかの方法? – readmymsg123

+0

コントローラ、html、jsファイルの関連部分を投稿してください。 – Behrang

+0

確かにBehrang!私のコントローラの機能は次のようになります:def map @nodes = Node.all @json = {"ノード" => @ nodes.as_json(:のみ=> [:ID、:Lat、:Lon])} end私のhtmlファイルは、単純に次のようになります。<!DOCTYPE HTML> ます。 Nodeクラスには、単にID LatとLonのノードが含まれていますが、次のような情報は含まれません。includeシンボル – readmymsg123

答えて

1

JSONは、実際にすべての法的javascriptの構文ですので、私は頻繁にこの操作を行います。おそらく仕事ができる

var stuff = <%= @json_hash.to_json %>; 

最も簡単な事を。信頼できないソースからJSONを取得する場合、JSONを解析するためにライブラリ関数を使用する方が良いでしょう。これによりコードを実行できなくなります。また、最後のハッシュでto_jsonに電話してください。 to_sとするだけではなく、erbのデフォルトです。

var stuff = '<%= raw @json %>'.evalJSON(); 

または使用してjQueryの:

+0

私はコントローラでas_jsonメソッドを呼び出したにもかかわらずto_jsonメソッドを呼び出しますか?私はそれを試して、それは私に予想外のトークン{エラーを与えた。私は困惑している。あなたが私にもっと助けを与えることができれば、それは素晴らしいことでしょう! – readmymsg123

+0

私はJSLintをチェックしてJSONが有効で、JSONParseを試していることを確認しました...なにが問題ですか!?! =( – readmymsg123

+0

私は 'as_json'が' to_json'を呼び出すのに適したハッシュを返すと信じています。あなたは 'rails console'でそれを試して、何が起こっているのかを知ることができます。有効なJSON文字列がある場合は、 'var'宣言の後で文書にドロップしてください。 –

1
@json = {:Nodes => @nodes.map({|n| [n[:ID], n[:Lat], n[:Lon]] })}.to_json 

プロトタイプを使用して、あなたはこれを行うことができますRailsでは

var stuff = jQuery.parseJSON('<%= raw @json %>'); 
0

4つの全てこのソリューションは、私のために動作しないが、私はこれを行います。

var consumers; 
consumers = <%= @consumers.to_json.html_safe %>; 

so私は放火犯を使用し、それは予期しないトークンがあることを述べている

function consumersRubyToJavascriptArray(json){ 
    for (var i = 0; i< json.length; i++) { 
     consumers.push(new Consumer({ id: json[i][0], name: json[i][2], phone: json[i][3], cpf: json[i][4]})); 
    } 
}