php提交post请求出现数组被截断情况的解决方法

转账自:https://www.cnblogs.com/orzlin/p/5985445.html

最近做表单,涉及提交大数组,发送到后端后,发现数组被截断了,例如原版有110行,传到后台只有80行。

解决过程

经过调试发现前端页面提交post请求时数据量是正确的,但到服务端只能接受到166条。

一开始以为是post请求长度超过限制,不过看了下请求内容才200多K,而post请求默认支持8M以内的数据传输。

于是怀疑可能是php内部配置导致的,后来百度了下果不其然发现max_input_vars这个配置项,该配置项是在php 5.3.9版本之后才加入的,目的是为了防止hash冲突。

既然如此那就改下该配置项,默认是1000,改成10000;重启服务后发现服务端获取到的数据量是之前的10倍,正好也是配置项调整之后的倍数。

然而前端传的数据量是不确定的,就算把max_input_vars设置成10万,也有可能不够用,还是另寻他法吧。

最终解决方法

前端将数组转换成json传输

关键代码如下:

    var t;

    $(function () {
        $(".btn-save").click(function () {
            $(".btn-save").html('正在保存中...');
            $(".btn-save").attr("disabled","disabled");
            t = window.setTimeout("postData()",1000);
        });
    });

    function postData() {
        window.clearTimeout(t);
        var jsonObj = $("#form1").serializeJSON();  //json对象
        var jsonStr = JSON.stringify(jsonObj);    //json字符串
        $("#data").val(jsonStr);
        $("#form2").submit();
    }

发表评论

邮箱地址不会被公开。 必填项已用*标注