【问题标题】:Passing a javascript variable (string) to the controller via ajax - 404通过 ajax - 404 将 javascript 变量(字符串)传递给控制器
【发布时间】:2017-11-24 01:38:06
【问题描述】:

我正在尝试根据此处显示的示例通过 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 routes”显示定义了以下路由:

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

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

【问题讨论】:

  • 您不能在 url 中通过 post 请求传递参数。使用获取请求。或将 ajax 中的 id 作为数据参数传递

标签: javascript ruby-on-rails ajax


【解决方案1】:

如果您希望将 :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' },
  ...

【讨论】:

  • 这行得通,非常感谢! AJAX 调用现在给了我一条成功消息! :) 我通过 将消息包含到我的视图中以查看视图中的字符串,但在 AJAX 调用后它不会更新。您是否偶然知道如何更新视图以显示消息?
  • 是的 - 您需要在控制器中响应消息,然后使用此数据填充 AJAX 成功中的字段。可能值得为此创建一个新问题,但简而言之:Controllerrender json: { message: @message },成功$('.container-class-name').text(data.message)。 (您还需要将data 传递到成功回调的函数中,即function(data)...。)希望对您有所帮助!
猜你喜欢
  • 2020-02-26
  • 2016-11-08
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多