有多种形式,但只提交变更中的一个
问题描述:
我创建在Perl,看起来像this使用CGI::Application
和HTML::Templates
一个网站来完成。
底部表单将出现在我的数据库中的每个数据集。例如。 400次。
底部表单的想法是用户应该能够对现有数据集进行更改,顶部表单创建新数据集。
顶部表单工作,并使用Ajax在数据库中查找非法值,用户不被允许进入。
问题
将有每个数据集的保存按钮,如屏幕截图所示。
如何提交与使用Ajax按下的保存按钮对应的数据集?
我能做到这一点纯jQuery和具有隐藏input
像这样
<form action="" method="post">
<input name="anchor" value="34" type="hidden">
<input name="title" type="text" />
...
<button type="submit">Save</button>
</form>
但没有Ajax,我可以为数据库中的非法值不是第一次检查。
Ajax代码的外观如何,只提交保存按钮所属窗体的数据集?
答
你可以使用.serialize()
方法:
$('form').submit(function() {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function(result) {
// the AJAX request succeeded => do something
// with the results returned by the server
}
});
return false;
});
这将认购一切形式提交事件(也许你可以调整选择将其限制只包含在表的形式),并提交时它将取消默认操作并通过序列化所有表单字段发送AJAX请求。
这很有趣!但是,如何将数据集发送到后端Perl脚本?这就是我现在的'.ajax()'看起来像http://pastebin.com/aW72iW5L – 2011-05-09 11:37:19
@Sandra Schlichting,'$(this).serialize()'方法将把表单的每个输入字段与其名称和值,并生成适当的请求字符串。在您的代码中,您手动连接了'data'属性中的所有值,但这不再是必需的,因为当您序列化表单时,它们将发送到服务器。因此,在您的服务器端脚本中,如果您的服务器端脚本没有通过AJAX调用发送,而是通过正常的表单提交,则会以与获取值相同的方式获取值。 – 2011-05-09 12:14:37
非常感谢您的详细解释! =) – 2011-05-09 12:45:31