Javascript 将视图中按钮的参数传递给jQuery,并使用Ajax将其传递给控制器方法?

Javascript 将视图中按钮的参数传递给jQuery,并使用Ajax将其传递给控制器方法?,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我对Rails和Haml是相当陌生的。我试图在我的视图中有一个保存“key”参数的按钮,该参数将传递相同的参数,并在使用jQuery和Ajax的控制器中触发一个方法 在我的另一个类中,一切都可以在幕后完成(这是一个POST REST请求),除了一条成功消息之外,我不需要查看任何内容。我已经调试了所有变量和路由,但是,由于某种原因,Ajax没有捕获键:参数。它一直在说未定义。我试着在控制器方法中硬编码键参数,其他一切都已确认工作,但只是缺少参数 在我看来,我有这样一句话: %button#star

我对Rails和Haml是相当陌生的。我试图在我的视图中有一个保存“key”参数的按钮,该参数将传递相同的参数,并在使用jQuery和Ajax的控制器中触发一个方法

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

在我看来,我有这样一句话:

%button#start{ key: @start_key }= start
在my 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 !!!');
     });
});

我不确定这样做是否正确。请随意给我一些评论,或者是否需要其他信息。

您缺少一些信息,请参阅内联评论

$(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 !!!');
     });
});
现在您将一个对象发布回rails应用程序,params散列应该包含键“key”和正确的值,例如:

{key: "my-key-value"}

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

运行
$('button#start').attr('key')在你的javascript控制台中?当我点击它时,它什么也没说。没有错误,但是当我使用调试器时,start\u键是未定义的。我打赌
@start\u键
是nil,这意味着该属性从未设置过。通过将其输出到html来确认其值。你的意思是使用
@start\u key
还是
start
?@start\u key是一个参数,用于从上一页选择哪个进程,我已经仔细检查了该变量,它得到的是正确的进程键
$('button#start')
返回任何元素?我从rails服务器得到了一个无路由错误。但是rake routes说有这样一个路由get/process/start\u进程。我想知道我是否必须将其更改为POST/process/start\u process。关于这个对象,我想知道您是否可以解释一下名为param的注释的含义?我已经将路由更改为post,并且我的服务器中出现了ActionView::MissingTemplate错误。我在想,如果我需要在我的控制器方法中添加respond_to by named param,我的意思是你正在向服务器传回一个散列,因此你的参数有key/name。在您只是单独传回参数(表示其“未命名”)之前,它将成为params数组中的一个键,而不是一个值。请参阅我文章末尾的两个哈希。是的,您需要响应/render/redirection。默认情况下,rails正在寻找一个不存在的
视图/process/start\u process.html/haml/erb/etc
。。。我想我正在寻找类似respond_to respond_to do | format | format.js和don render to view的东西?在我的控制器中?我确实对{render nothing=true}做出了响应。。现在服务器很高兴,但我仍然没有传递参数。
{"my-key-value"=>nil}
{key: "my-key-value"}