使用jqueryajax提交大型表单,而不使用serialize()
我想使用jqueryajax提交一个大表单,但是在搜索了一整天的解决方案之后,这似乎是不可能的。我希望我错了 基于这个话题上的众多线索,这是我目前为止得到的使用jqueryajax提交大型表单,而不使用serialize(),jquery,ajax,forms,post,serialization,Jquery,Ajax,Forms,Post,Serialization,我想使用jqueryajax提交一个大表单,但是在搜索了一整天的解决方案之后,这似乎是不可能的。我希望我错了 基于这个话题上的众多线索,这是我目前为止得到的 function familyUpdate() { familyOverlay(true); var form = $("#familyform"); var formdata = form.serialize(); $.ajax({ url: 'family-upda
function familyUpdate() {
familyOverlay(true);
var form = $("#familyform");
var formdata = form.serialize();
$.ajax({
url: 'family-update.php',
data: {
cache: false,
type: 'post',
dataType: 'json',
data: formdata
},
success: function () {
familyOverlay(false);
},
error: function () {
alert("Unable to update family");
familyOverlay(false);
}
});
}
问题是我的表单太大了,据我所知,使用serialize()会生成一个要提交的字符串,并从本质上将我的帖子转换为GET,这意味着我遇到了浏览器的URI长度限制,因此整个表单不会提交
有没有一种方法可以使用POST提交表单,而不使用serialize(),这样我就不必担心数据的长度了?事实证明,我的问题在于语法 具体而言,本部分:
data: {
cache: false,
type: 'post',
dataType: 'json',
data: formdata
},
应该只是
data: formdata,
type: 'POST',
所以这是可行的:
function familyUpdate(){
familyOverlay(true);
var form = $("#familyform");
var formdata = form.serialize();
$.ajax({
url: 'family-update.php',
type: 'POST',
data: formdata,
success: function() {
familyOverlay(false);
},
error: function(){
alert("Unable to update family");
familyOverlay(false);
}
});
}
唉。浪费我大部分时间的总是最愚蠢的错误。首先,所有数据都作为字符串传输,POST请求不会转换为GET请求,它们都发送字符串。POST请求的限制实际上只是一个服务器设置,但设置得太高可能会导致ddos攻击更容易对您的服务器执行。换句话说,使用
serialize()
没有任何区别,在大小限制成为问题之前,您必须检查表单,即使这样,您也可以在大多数服务器端语言中增加限制,如果您愿意的话,甚至可以增加到2GB,POST规范中没有设置限制,但是GET请求的最大长度是URL的长度,我认为是2048字节?谢谢。我不知道POST也发送字符串。所以我听到的是,如果我的服务器可以用传统的方式发布表单,那么它就可以用ajax方式发布表单。我的问题在别处。是的…………不需要做这两项作业<代码>数据:$(“#familyform”).serialize(),更干净。实际上,我最终将其更改为var formdata=$(“#familyform”).serialize();并且仍然将formdata分配给数据。这对我来说很干净。我实际上只是暂时将“var form”部分放在那里进行测试,以确保我确实获得了表单的句柄。