转账自: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();
}