使用jqueryajax提交大型表单,而不使用serialize()

使用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

我想使用jqueryajax提交一个大表单,但是在搜索了一整天的解决方案之后,这似乎是不可能的。我希望我错了

基于这个话题上的众多线索,这是我目前为止得到的

    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”部分放在那里进行测试,以确保我确实获得了表单的句柄。