PHP,AJAX:大数据被截断

Lia*_*m M 9 php apache ajax 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;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

发送:

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;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:我已经'修复了'这个,但不一定能找出问题是什么以及如何解决它.这是一个有趣的问题所以我将描述我的解决方法,并将问题保持开放.

我正在做的不是让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;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

重要的一点当然是:

var serialised = JSON.stringify(MIRM_MODEL.serialise());
Run Code Online (Sandbox Code Playgroud)

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

Zan*_*per 2

尝试将 jQuery 的 ajaxtimeout参数设置为一个较高的数字(注意,它以毫秒为单位,因此您可能需要 10000,即 10 秒)。可以尝试的其他一些选项: 1. 检查您的 PHP 最大执行时间是否合适。我怀疑这是否相关,但这是可能的。2. 在 jQuery 的错误函数上,运行console.log(xhr)结果XHR(您必须在 Chrome 中执行此操作或找到另一种查看结果的方法)。XHR 是一个 XHR 对象,其中包含有关连接所发生情况的调试信息,例如状态代码、超时信息等。

编辑:另外,您是否检查过数据库中字段的最大大小?数据库很可能会自动截断信息。