2017-09-26 12 views
1

私はレールが初めてです。私はajaxを使用してコントローラメソッドを呼び出そうとしています。コントローラメソッドは、ajaxで成功したコールバックが利用できると仮定したインスタンス変数を作成します。javascriptのrails変数をajaxに渡す

ただし、コードを実行するたびに、JSコンソールに「test_array is null」というエラーが表示されます。何が起きているのかについての解答と洞察を提案してください。コードは以下の通りです。

私はこの問題をインターネット(SOを含む)で徹底的に調査しましたが、答えのどれも私の問題に適合していないようです。

sentiscores_controller.rb

def render_phrase 
@tag_cloud_temp = [{text: 'Hello', weight: 1000},{text: 'World!', weight: 1100}] 
end 

実際のHTMLソースコードは、あなたのコントローラには、以下の

$.ajax({ 
      type: 'GET', 
      url: '/sentiscores/render_phrase', 
      data: {'senti_score': 5}, 
      success: function(){ 
        var test_array = null; 
        console.log(test_array[0]['text']); 
        }, 
      error: function(exception){console.log("Error! : "+exception);} 
       }) 
+0

完全な配列をログに記録すれば、どのような出力が得られますか? 'console.log(test_array)' – jon1467

+0

実際に生成されるJavaScriptコードはどのように見えますか? – David

+0

@ jon1467もし私がJSコンソールでnullを与える完全な配列を記録するならば。 – AndEnthu

答えて

5

のように見えますindex.html.erb

$.ajax({ 
     type: 'GET', 
     url: '/sentiscores/render_phrase', 
     data: {'senti_score': 5}, 
     success: function(){ 
     var test_array = <%= raw @tag_cloud_temp.to_json%>; 
     console.log(test_array[0]['text']); 
     }, 
     error: function(exception){ 
     console.log("Error! : "+exception); 
     } 
     }) 

、あなたがしたいですよrender JSONをAJAX呼び出しに戻すには、次のようにします。

# controller method  
@tag_cloud_temp = [{text: 'Hello', weight: 1000},{text: 'World!', weight: 1100}] 

render json: { 
    tag_cloud_temp: @tag_cloud_temp 
} 

次に、あなたのAJAX呼び出しで、あなたはこのように、そのrenderからdataを受け取ることになるでしょう:あなたはdataオブジェクトを見れば、あなたはあなたのからの情報が表示されるはずです

// in ajax call 
success: function(data) { 
    console.log(data); 
} 

コントローラ。

+0

良い答え。あなたが投稿したときに私はちょうど同じことを入力していました。私はOPがクライアント側で '<%= raw @ tag_cloud_temp.to_json%> 'を使用できない理由についてもコメントするつもりでした。なぜなら、これは混乱の原因のように思われるからです。とにかく、素敵! – jvillian

+0

ああ、ありがとう、ええ、それは確かに、学習の良い点です! –

+0

@JonathanBowman私はあなたから提案された変更を行いました。今すぐ取得するメッセージは、JSコンソールのです。 – AndEnthu

関連する問題