【问题标题】:Passing a parameter from button in the view to jQuery and use Ajax to pass that to a the controller method?将视图中按钮的参数传递给 jQuery 并使用 Ajax 将其传递给控制器​​方法?
【发布时间】:2013-11-06 03:43:30
【问题描述】:

我对 Rails 和 Haml 还很陌生。我试图在我的视图中有一个按钮,它包含一个“key”参数,它将传递相同的参数并使用带有 Ajax 的 jQuery 在控制器中触发一个方法。

一切都可以在我的其他课程的幕后完成(这是一个 POST REST 请求),除了成功消息之外我不需要查看任何内容。我已经调试了所有变量和路由,但是,由于某种原因,Ajax 没有捕获key: parameter。它一直说undefined。我尝试在控制器方法中对key 参数进行硬编码,其他所有内容均已确认正常工作,但只是缺少该参数。

在我看来,我有这一行:

%button#start{ key: @start_key }= start

在我的 process.js 文件中:

$(document).ready(function(){
    $('button#start').on('click', function(){
        var start_key = $('button#start').attr('key');   <------------
         $.ajax({
            url: '/process/start_process',
            data: start_key
         })
         $('#started_msg').text('started !!!');
     });
});

在我的controller.rb中,我有这个方法:

def start_process
    Client.start_process(params[:key])
End

我不确定这是否是正确的方法。请随时给我一些 cmets 或是否需要其他信息。

【问题讨论】:

  • 在 JavaScript 控制台中运行 $('button#start').attr('key'); 会得到什么?
  • 当我点击它时它什么也没说。没有错误,但是当我使用调试器时 start_key 未定义
  • 我打赌@start_key 是nil,这意味着该属性永远不会被设置。通过将其输出到 html 来确认其值。你的意思是使用@start_key 还是start
  • @start_key 是一个参数,用于从 Pervious 页面中选择哪个进程,我已经仔细检查了它正在获取正确进程密钥的变量
  • $('button#start') 是否返回任何元素?

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

您缺少一些位,请参阅内联 cmets。

$(document).ready(function(){
    $('button#start').on('click', function(){
        var start_key = $('button#start').attr('key');
         $.ajax({
            url: '/process/start_process',
            method: 'POST', // <-- POST instead of GET
            data: { // <-- POST an object instead of just the value
                key: start_key // <-- named param
            }
         })
         $('#started_msg').text('started !!!');
     });
});

在您刚刚发送回“bare”键之前,params 数组看起来像这样:

{"my-key-value"=>nil}

现在您将对象发布回 rails 应用程序,params 哈希应该包含键“key”和正确的值,例如:

{key: "my-key-value"}

如果您查看您的 Rails 服务器请求日志,您应该能够看到差异。它列出了请求参数(至少 rails 4 有,我认为 rails 3 也有)。

【讨论】:

  • 我的 rails 服务器出现无路由错误。但是 rake routes 说有这样的路由 get /process/start_process.我想知道是否必须将其更改为 POST /process/start_process。另外关于对象,我想知道您能否解释一下名为 param 的注释是什么意思?
  • 我已更改发布路线,但在我的服务器中出现 ActionView::MissingTemplate 错误。我在想是否需要在我的控制器方法中添加 respond_to
  • 通过命名参数我的意思是你将哈希传递回服务器,所以你的参数有键/名称。在您自己传回参数之前,这意味着它的“未命名”,它成为 params 数组中的键而不是值。请参阅我帖子末尾的两个哈希值。是的,您需要一个 response_to/render/redirection。默认情况下,rails 正在寻找不存在的views/process/start_process.html/haml/erb/etc
  • 理解参数的意思,所以我想每当我需要传递参数时,我应该使用 post.......好点......我想我正在寻找类似 respond_to respond_to 的东西|格式| format.js 并且不渲染到视图?在我的控制器中?
  • 我做了 respond_to {render nothing = true} .. 现在服务器很高兴,但我仍然没有传递参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2015-08-11
相关资源
最近更新 更多