我正在为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框架中:
看一下这个铁路广播