Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jQuery以部分形式提交一个大表单_Php_Jquery_Forms - Fatal编程技术网

Php jQuery以部分形式提交一个大表单

Php jQuery以部分形式提交一个大表单,php,jquery,forms,Php,Jquery,Forms,我有一个大的表单,它被拼接成4个div,每个div代表一个步骤,所有内容都包含在一个表单中,我的问题是表单变得太大了,因为它能够动态添加新字段(图片、文本、语言) 因此,我想知道是否有任何选项可以部分提交此表单,我的服务器限制每篇文章只能提交20个字段,我无法更改此设置,为什么不创建多个表单,并与每个步骤关联?您可以始终将字段值打包到一个大json数组中,对其进行编码,然后使用jQuery.ajax发布。它将看起来像一个大的单一领域。在服务器端,您可以对其进行解码,然后瞧,绕过限制。但老实说,那

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


因此,我想知道是否有任何选项可以部分提交此表单,我的服务器限制每篇文章只能提交20个字段,我无法更改此设置,为什么不创建多个表单,并与每个步骤关联?

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

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


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

如果服务器限制困扰您,您可以用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;
};

而不是在服务器上

$data = json_decode($_GET["data"]);
foreach($data as $row)
{
 //Do What ever you want with $row
}
或者如果您需要使用$\u POST

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

@Cody answer工作得很好但我在文件输入方面有问题


这个库也很好用,我可以提交文件,支持内部数组,没有任何更改

您可以将它作为JSON输入发送到服务器吗?@Murali是的,这将是最好的解决方案,在JSON上序列化您的表单。因为我只想单击一个按钮,然后提交所有内容,多个表单,表示多个提交按钮,尽管可以制作一个按钮并使用jqueryy提交每个按钮。您可以对所有表单字段进行json_编码,因此只发布一个数据:$(“#您的表单_id”)。serialize()
var post_data = { data : data};
$.post('url', post_data ,function(data) {
  console.log(data);
});