2017-11-23 3 views
0

私はここに示した例によれば、AJAXを経由して私の見解から私のコントローラにjavascriptの変数を渡すしようとしています:Passing JavaScript variable to ruby-on-rails controllerAJAXを介してコントローラにjavascriptの変数(文字列)を渡す - 404

私のコントローラ「pages_controllerは。 RB」とは、以下の方法が含まれています

def test_page 
    @message= params[:id] 
    puts @message 
end 

それぞれのビュー 『test_page.html.erbは』ボタンをクリックすることによってトリガーされるAJAX呼び出しではJavaScriptが含まれています

<button id="submit_button">Submit Text</button> 

<script> 
    $("#submit_button").on('click',function(event) { 
     var string = "helloWorld"; 
     $.ajax({ 
      url: "/test/test_page/?id="+string, 
      type: "POST", 
      dataType: "text", 
      success: function(){ 
      alert('Saved Successfully'); 
      }, 
      error:function(){ 
      alert('Error'); 
      } 
     }); 
    }); 
</script> 
routes.rbをで

私は次のルートを定義している:私はボタンを押したときに

post 'test/test_page/:id', to: 'pages#test_page' 

はしかし、私は、定義されたエラー・アラートを取得し、ブラウザのコンソールを検査する時に、私は次のエラーを参照してください。

jquery.js:11007 POST https://my-website.com/test/test_page/?id=halloWelt 404 (Not Found) 

しかし、私は、「レーキルートは、」次のルートが定義されていることを示していることがわかります。私は、コントローラ内の別のメソッドを定義する試みた

POST /test/test_page/:id(.:format) pages#test_page 

再ルーティングすることができますが、404エラーは依然として残ります。この404エラーを修正するにはどうすればよいですか?

+0

ポストリクエストでURLにparamsを渡すことはできません。取得要求を使用します。またはそのidをajaxでデータパラメータ – Emu

答えて

2

:idをそのルートに渡す場合は、次のURLを使用できます。https://my-website.com/test/test_page/halloWelt (すなわち、"/test/test_page/" + string

あなたのAJAXは、POSTリクエストでは、他のデータを渡す場合は、urlパラメータではなく、以下のようなデータを明示的に渡す必要があります。

$.ajax({ 
    url: "/test/test_page/" + string, 
    type: "POST", 
    data: { hi: 'there' }, 
    ... 
+0

として渡してください。これはうまくいきました、ありがとう! AJAXの呼び出しは今私に成功メッセージを与える! :)私はビュー内の文字列を見るために私のビューに<%= @message%>経由のメッセージを含めましたが、AJAX呼び出し後は更新されません。メッセージを表示するためにビューを更新する方法を偶然知っていますか? – AaronDT

+0

はい - コントローラー内のメッセージで応答し、このデータを使用してAJAX成功のフィールドにデータを入力する必要があります。これは新しい質問を作成する価値があるかもしれませんが、一言で言えば、$( '。container-class-name')の成功で、_Controller_: 'render json:{message:@message}'です。メッセージ) '。 (成功したコールバックの関数、 'function(data)...'に渡された 'data'も必要です)。 – SRack

関連する問題