javascript - POST 数据在浏览器和 PHP 之间被 chop

标签 javascript php ajax post

我遇到了一个问题,即使用 AJAX 通过 POST 发送的大数据集没有进入 PHP 中的 $_POST 变量。

用户通过网络表单上传 Excel/CSV 文件,并通过 AJAX 进行解析。这个特定示例有 775 条记录,每条记录有 13 个字段/元素。添加正在提交的其他字段,并且数据集中的元素少于 11,000 个。根据我对该主题所做的研究,32 位浏览器(即 Firefox、Chrome 等)应该能够处理 42.9 亿个元素,因此我不认为数据大小是一个问题,尤其是作为响应从文件上传包含所有元素。

只有在提交整个表单进行验证并输入数据库时​​,问题才会浮出水面。问题是 Firebug 和 Chrome 开发者工具上的控制台显示整个数据集已提交: Firebug Output

$_POST 上做一个 var_dump 得到这个: enter image description here

php.ini 将 'post_max_size' 设置为 200M。甚至 'upload_max_filesize' 都设置为 100M。这个问题在我亲自测试过的Firefox 32.0.3和Chrome 37.0.2062.103m以及UAT测试过的其他旧版本(包括IE 10)中都会出现。

AJAX 调用是:

new wrapper.ajax('/t1.php', {
    type: 'POST',
    data: data,
    form: $('form[name=oppForm]'),
    success: function (response)
    {
    if (response.result)
    {
        window.location = response.result;
    }
    },
    complete: function ()
    {
    $("#submit").loading('done');
    }
});

PHP 是:

<?php
var_dump($_POST);

有什么想法吗?

编辑

在与其他一些开发人员交谈后,我还检查了 php://input 的输出,发现它确实包含浏览器发送的整个 POST 数据,但数据不是正确翻译成 $_POST。但是,如果我从发布数据中删除 10 个键并提交 765 而不是 775,它确实可以正常工作。

最佳答案

问题最终是 php.ini 文件中的 'max_input_vars' 设置得不够高。该值设置为 10,000,用户提交了近 11k 的数据,因此其中一些数据被 chop 了。将此值更改为更大的值即可解决问题。

关于javascript - POST 数据在浏览器和 PHP 之间被 chop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26240333/

相关文章:

javascript - 时间码的html5输入?

javascript - NodeJS setInterval 计时器在第一个间隔后崩溃

php - 打开期刊系统不显示文章xml View 问题

jquery - 使用反向 ajax 对同一客户端进行多个 ajax 调用

javascript - $rootScope.$watch 触发了两次

javascript - 如何在对象函数中调用另一个函数

php - 如果 include() 是有条件的,即使不满足条件,PHP 也会包含该文件吗?

php - laravel包中路由声明的顺序

ajax - 填写表格时,AJAX + Flask更新服务器请求

java - 关于weblogic portlets功效的一个问题