有多种形式,但只提交变更中的一个

有多种形式,但只提交变更中的一个

问题描述:

我至今有多种形式,但只提交变更中的一个

我创建在Perl,看起来像this使用CGI::ApplicationHTML::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请求。

+0

这很有趣!但是,如何将数据集发送到后端Perl脚本?这就是我现在的'.ajax()'看起来像http://pastebin.com/aW72iW5L – 2011-05-09 11:37:19

+1

@Sandra Schlichting,'$(this).serialize()'方法将把表单的每个输入字段与其名称和值,并生成适当的请求字符串。在您的代码中,您手动连接了'data'属性中的所有值,但这不再是必需的,因为当您序列化表单时,它们将发送到服务器。因此,在您的服务器端脚本中,如果您的服务器端脚本没有通过AJAX调用发送,而是通过正常的表单提交,则会以与获取值相同的方式获取值。 – 2011-05-09 12:14:37

+0

非常感谢您的详细解释! =) – 2011-05-09 12:45:31