PHP, AJAX : large data being truncated

标签 php ajax apache centos

问题

我正在使用 jQuery 将(相对)大量数据发布到我正在从 Ubuntu 迁移到 CentOS 的 Web 系统(一个痛苦的过程)。问题是接收到的数据被截断了。从服务器向客户端发送相同的数据不会导致截断。

“发送”的数据量(即我在调试 Javascript 时看到的)是 116,902 字节(正确的数据量),而接收到的数据量大约 115,668 字节:这个数字似乎有所不同,让我相信问题可能与时间有关。事务在大约 3.1 秒内完成(接收、响应),这不是很长的时间。有什么我应该检查的设置吗?

抛开这个想法,我的 PHP 安装配置为接受 8M 的发布数据并使用 128M 的物理内存,这似乎足够了。

jQuery 代码如下。我很确定这不是问题所在,但我已按要求将其包括在内。

接收:

function synchronise_down()
{
    $.ajax({url: "scripts/get_data.php",
        context: document.body,
        dataType: "json",
        type: "POST",
        success: function(result)
            {
                // Fix the state up.
                update_data(result);

                // Execute on syncronise.
                execute_on_synchronise();
            },
        error: function(what, huh)
            {
                IS_WAITING = false;
            }
        });
}

发送:

function synchronise_up()
{
    var serialised = MIRM_MODEL.serialise();
    LAST_SERIALISED = new Date().getTime();
    $.ajax({url: "scripts/save_model.php",
        context: document.body,
        dataType: "json",
        data: {"model":serialised},
        type: "POST",
        success: function(result)
            {
                // Fix the state up.
                update_data(result, true);

                // Execute on syncronise.
                execute_on_synchronise();
            },
        error: function(what, huh)
            {
                IS_WAITING = false;
            }
        });
}

解决方法(不能称之为解决方案)

编辑:我已经“修复”了这个问题,但不一定能找出问题所在以及解决方法。这是一个有趣的问题,所以我将描述我的解决方法并让问题悬而未决。

我正在做的不是让 jquery 处理我的大数据的序列化,而是我自己先做,本质上是序列化两次。代码如下:

function synchronise_up()
{
    var serialised = JSON.stringify(MIRM_MODEL.serialise());
    LAST_SERIALISED = new Date().getTime();
    $.ajax({url: "scripts/save_model.php",
        context: document.body,
        dataType: "json",
        data: {"model":serialised},
        type: "POST",
        success: function(result)
            {
                // Fix the state up.
                update_data(result, true);

                // Execute on syncronise.
                execute_on_synchronise();
            },
        error: function(what, huh)
            {
                IS_WAITING = false;
            }
        });
}

当然重要的是:

var serialised = JSON.stringify(MIRM_MODEL.serialise());

现在,当它到达服务器时,我需要解码这个数据,因为它已经被序列化了两次。这种“解决方案”会增加成本:发送更多数据,做更多工作。问题仍然存在:问题是什么,真正的解决方案是什么?

最佳答案

检查以下 php.ini 变量:

post_max_size

max_input_vars - 这实际上可能是罪魁祸首,因为它会截断数据

关于PHP, AJAX : large data being truncated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655489/

相关文章:

php - DocuSign 嵌入式签名的隐式身份验证

php - 使用 codeigniter 在数据库中存储注销时间

asp.net-mvc - Asp.Net Ajax.BeginForm 和 UpdateTargetId 不起作用

javascript - 在没有可用 Web 服务器的情况下将 XML 本地加载到 JavaScript 中?

php - 如何将 PHP 代码/文件添加到 HTML(.html) 文件?

java - ProjectForge 中的 LifecycleException

php - 键入 example.com 时,域不会转到 https ://example. com

javascript/jquery 数组交互在 .on ("click"之后不起作用)

apache - SSL 通配符 Apache

php - 更正浮点值