我如何改进我的Rails 3 / jQuery / AJAX方法从超链接调用一个动作



我正在为Rails 2.3.8应用程序修改一些代码。整个应用程序使用Prototype,但我需要为一个控制器和它的视图添加一些功能,所以我将旧的原型代码切换到jQuery并使用不同的布局。

所以我不能在这些视图中使用link_to_remote了。我有一种情况,我需要在"编辑"操作中"清除"所讨论记录的属性。

我已经创建了一个具有特定id的超链接,并在application.js中将click函数绑定到它。我已经将属性的名称附加到这个特定id的末尾。

在这个"remove_attribute"动作中我有两个东西。我需要记录的id和属性的名称。

我只是序列化表单并提交。但是我需要添加我点击的超链接的id !

在我的application.js,我有:

hash = { type: "POST", url: "/vehicle_applications/remove", data: $("#myform").serialize() };
$.ajax(hash);
return false;

但是你可以看到这里没有超链接的id。我知道要获得超链接的id,我引用:

$(this).attr('id')

但我的问题是,我如何获得一个变量名和值附加到$("#myform").serialize()的结果?

还有,我的方法有多糟?

jQuery的serialize生成一个查询字符串:

.serialize()方法创建一个标准url编码表示法的文本字符串。[…]
a=1&b=2&c=3&d=4&e=5

所以你只需要添加另一个组件:

var data = $('#myform').serialize();
if(data)
    data += '&id=' + encodeURIComponent($(this).attr('id'));
else
    data = 'id=' + encodeURIComponent($(this).attr('id'));
$.ajax({
    url: '/vehicle_applications/remove',
    type: 'post',
    data: data
});

根据您的路由,您可能希望在URL中id:

$.ajax({
    url: 'vehicle_applications/remove/' + encodeURIComponent($(this).attr('id')),
    type: 'post',
    data: $('#myform').serialize()
});

这个版本应该是更典型的Rails和RESTful路由,但我不知道你的路由是什么样子的

我认为rjs是一个很好的选择。这是一种很好的实现rest式ajax的方法,它被直接嵌入到rails框架中:

看一下这个铁路广播

最新更新