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