Javascript Jquery/PHP:使用Ajax传递JSON数据最终被截断
我正在使用ajax传递一个相当大但不是很大的Json对象,并使用PHP将其写入一个文件。$.post命令工作正常,但是文件中的数据被截断,尽管仍然是完美的JSON格式 我不明白为什么 下面是JavaScript命令。输出是数组中包含数组的javascript对象Javascript Jquery/PHP:使用Ajax传递JSON数据最终被截断,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我正在使用ajax传递一个相当大但不是很大的Json对象,并使用PHP将其写入一个文件。$.post命令工作正常,但是文件中的数据被截断,尽管仍然是完美的JSON格式 我不明白为什么 下面是JavaScript命令。输出是数组中包含数组的javascript对象 function saveWerJSON (output) { console.log(output); $.post("writefile.php", output, function(output){
function saveWerJSON (output) {
console.log(output);
$.post("writefile.php", output, function(output){ console.log("yes"); });
};
下面是PHP文件的全部内容
<?php
file_put_contents("wer1861.json", json_encode($_POST, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT));
?>
该文件在1422行之后剪切,长度:40300。我认为问题不在于编码,而在于长度。因为如果我改变变量的顺序,它会在不同的地方,但长度相同
我应该补充一点,文件中的json是有效的。所以是变量被截断了。不是文件本身
有什么想法吗?今天早上通过一个被截断的大数组时遇到类似问题;最后,使用JSON.stringify解决了这个问题,并在服务器端使用了有问题的参数和解码:现在它开始工作了。试试看。FWIW:我刚刚遇到了完全相同的问题。我使用两台服务器;一个是仅在内部网上可用的开发服务器&它运行HTTP。生产机器运行HTTPS,并且是公共可用的。到开发服务器的传输始终将JSON数组的第一个子数组截断为17行,而不管该数组中表示的是什么数据。传输到生产服务器工作正常 以下是jQuery:
var json = {
name: name ? name : "HTML table",
head: jsonHead,
body: jsonBody,
foot: jsonFoot,
width: width,
headRowCount: table.find("thead tr").length,
};
$.ajax({
type: "POST",
url: "/iTrain/ajax/common.php",
data: {
protocol: "table2excel",
json: json,
},
dataType: "json",
success: function (data) {
if (data.file) {
window.open(data.file, "_blank");
console.log("output file was stored to " + data.file);
}
},
});
下面是我用来问IIS它听到了什么的PHP:
echo json_encode($_REQUEST["json"]);
在传递JSON数组之前检查它显示JSON.body元素正确地包含了20行,但是检查响应只显示了17行。其他元素都正确接收
我不想再绞尽脑汁想这个问题了,因为它在生产中起作用。你在运行什么服务器?您为php分配了多少内存?我现在正在Windows7机器上的wamp上运行它。不确定如何检查内存分配。但这个物体并不巨大。如果它有5000个元素,其中没有一个比短字符串或整数大,我会感到惊讶。请尝试使用LOCK_EX标志,或者尝试用对fopen、fwrite和fclose的调用替换它。我试过了。它似乎不起作用。