如何使用jQuery发布包含多个字段的表单?
虽然$.ajax()可以用来做ajax的事情,但我认为它不适合发布大表单的值如何使用jQuery发布包含多个字段的表单?,jquery,forms,post,Jquery,Forms,Post,虽然$.ajax()可以用来做ajax的事情,但我认为它不适合发布大表单的值 你如何发布一个大表单(许多字段),而不手工输入所有表单?你的假设背后的理由是什么?POST设计用于传输比GET更大量的数据。AJAX POST请求几乎与“正常”POST请求完全相同,只是由浏览器以稍微不同的方式在内部捆绑和处理。两个标题可能略有不同,但数据都是相同的。为什么AJAX不能处理“大”表单 你会怎么定义“大”表单呢 编辑:感谢您对问题的澄清。我理解你现在的要求,我知道你从哪里来。对于一个有大量输入的表单,总是
你如何
发布一个大表单(许多字段),而不手工输入所有表单?你的假设背后的理由是什么?POST设计用于传输比GET更大量的数据。AJAX POST请求几乎与“正常”POST请求完全相同,只是由浏览器以稍微不同的方式在内部捆绑和处理。两个标题可能略有不同,但数据都是相同的。为什么AJAX不能处理“大”表单
你会怎么定义“大”表单呢
编辑:感谢您对问题的澄清。我理解你现在的要求,我知道你从哪里来。对于一个有大量输入的表单,总是将其捆绑到Ajax请求中可能是一件痛苦的事情
因为您使用的是jQuery,所以有一个简单的解决方案。看看这个方法。您给它一个表单,它会返回一个包含所有表单输入元素和值的查询字符串,您可以将这些元素和值直接传递给ajax请求。在手册页面上有一个例子,展示了它是如何完成的
你所要做的就是:
$.ajax({
data: $("form").serialize(),
//etc.
});
其中,“form”
是表单的id。你要问的并不难。您所要做的就是收集表单的内容并将其传递给服务器(通常使用JSON)
请看下面的指南:
如果您还没有尝试过。然后创建一个BIG表单(现在不管你是什么意思),并使用$.ajax()
或jQuery表单插件发布它。你会知道是不是为了这种事情
编辑:-(编辑后)是给你的!试一试。您可以使用,因为它更容易操作
通过使用,您可以自动发送整个表单
$.post("/post_handler/",
$("form#my_form").serialize(),
function(json){
/*your success code*/
}, "json");
一个更完整的示例:
<script>
$().ready(function(){
$("form#my_form submit").click(function(){
$.post("/post_handler/",
$("form#my_form").serialize(),
function(json){
/*your success code*/
}, "json");
return false;
});
}
</script>
<form id="my_form" action="/post_handler/" method="post">
<input type="text" name="text1" value="my text 1" />
<input type="text" name="text2" value="my text 2" />
<input type="submit" name="submit_button" value="Send" />
</form>
$().ready(函数()){
$(“表单#我的表单提交”)。单击(函数(){
$.post(“/post\u handler/”,
$(“表单#我的表单”).serialize(),
函数(json){
/*你的成功代码*/
}“json”);
返回false;
});
}
这将覆盖默认的post
,并使用AJAX执行它。请尝试
它可能正是您需要立即执行的操作。如果您不想手动处理每个元素,则可能需要使用它
$.ajax({
type: "POST",
url: "form.php",
data: $("#form_id").serialize()
success: function(msg) {
alert("Form Submitted: " + msg);
}
});
我用$.ajax()发送了相当复杂(大)的表单,没有问题。我没有通过ajax请求发送文件,但我看到它已经完成了,它比传统的帖子工作得更好,因为在上传时它不会占用浏览器
根据您对@zombat的评论,我猜您有大量的输入,其中大多数在大多数情况下都是空白的。这里有两个建议1)将输入拆分为单独的表格,并仅在触摸/完成后立即发送。2) 使用JavaScript检查表单的状态,并将信息包装成JSON或XML,而不是发布表单数据,只发布数据结构
“大”应该不是问题,也许你可以找到一个更好的形容词来描述你的数据,让每个人都知道为什么很难发送。问题是如何从大表单中收集内容?手工书写需要很长时间。你知道它是如何决定发布内容的吗(一些默认机制,如提交表单时)或者逐个检查?@Shore您说您必须手动设置数据,即..这将自动提交表单中的所有字段。您可以将字段子集序列化为查询字符串。请在此处查看他们的文档:我不同意POST用于传输大量数据,然后获取。POST用于更改服务器的状态w第I个新信息。GET用于从服务器检索资源。@约翰:是的,这是每个请求的主要目的。但是,POST请求的大小没有实际限制,而GET请求有已知的限制,超过这些限制时会导致问题。我想我使用的短语是“专门用于”有点不正确,因为这意味着这是POST的唯一目的,当然这不是预期的解释。@Shore-好吧,这一切都是在客户端完成的,它基本上做了与您必须手动完成的相同的事情-它访问所有表单元素并将它们的值连接到一个字符串中。我相信您会赢“我没有注意到性能受到影响。如果您担心它,您可以随时对其进行基准测试。不过,它绝对是回答您问题的正确工具。$(“表单”“我的表单”)。serialize()
提供了
的内容,可以通过查询字符串格式发送。”(multiple=Multiple2&check=check2&radio=radio1
)。我问你怎么做的时候,你谈论的是什么。我认为OP指的是发布一个包含多个字段的表单。当你一个一个地发布字段时,有很多样板代码需要编写,我认为OP是在问是否有一种方法可以简单地发布表单上的所有字段。这个问题对我非常有用。