jQuery提交部分大表单

时间:2012-10-03 08:22:03

标签: php jquery forms

我有一个拼接在4个div中的大表单,每个div代表一个步骤,所有内容都只包含在1个表单中,我的问题是表单变得太大,因为有能力添加新字段,(图片,动态,文本,语言,

所以我想知道是否有任何选项可以部分提交此表单,我的服务器每个帖子限制为20个字段,我无法更改此设置

4 个答案:

答案 0 :(得分:1)

您始终可以将字段值打包到一个大的json数组中,对其进行编码并使用jQuery.ajax发布。它看起来像一个大的单一领域。在服务器端,您可以解码它,然后限制旁路。但老实说,那是什么类型的服务器?我以前从未听过这种限制。

另一种解决方案是在服务器端复制表单的状态(例如,在会话存储中),并进行ajax调用以更新会话存储中的各个字段。例如。当用户离开字段时,将该单个字段的值发布到服务器,然后服务器更新会话存储中的字段值。

还有许多其他可能的解决方案。

答案 1 :(得分:1)

如果服务器限制困扰您,您可以使用jSON序列化表单并将其作为单个参数传递

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

var data = $("form#myform").serializeObject();
window.location = "url?data="+encodeURIComponent(data);

而不是服务器

$data = json_decode($_GET["data"]);
foreach($data as $row)
{
 //Do What ever you want with $row
}

或者如果你需要使用$ _POST

var post_data = { data : data};
$.post('url', post_data ,function(data) {
  console.log(data);
});

答案 2 :(得分:0)

为什么不创建与您拥有的每个步骤相关联的多个表单?

答案 3 :(得分:0)

@Cody答案效果很好,但是文件输入有问题,

这个库http://jquery.malsup.com/form/也很有用,我能够提交文件,支持内部数组,而不需要做任何改动

相关问题