通过ajax-404将javascript变量(字符串)传递给控制器

时间:2017-11-23 17:33:21

标签: javascript ruby-on-rails ajax

我试图通过ajax将javascript变量从我的视图传递给我的控制器,根据此处显示的示例:Passing JavaScript variable to ruby-on-rails controller

我的控制器“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)

但是我可以看到“rake路线”显示定义了以下路线:

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

我已尝试在控制器中定义另一种方法并重新路由,但404错误仍然存​​在。我该怎么做才能解决这个404错误?

1 个答案:

答案 0 :(得分:2)

如果您要将:id传递给该路线,可以使用以下网址: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' },
  ...