我使用ajax传递一个相当大(但不是很大)的Json对象,并使用PHP将其写入文件。 $ .post命令工作正常,但文件中的数据被截断(尽管仍然是完美的JSON格式。
我无法弄清楚原因。
这是JavaScript命令。 “output”是一个javascript对象,包含数组中的数组。
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是有效的。所以这是被截断的变量。不是文件本身。
有什么想法吗?
答案 0 :(得分:0)
今天早上有一个类似的问题,同时传递一个被截断的大阵列;最终解决了使用JSON.stringify与问题参数和服务器端解码。 :)现在它正在运作。试试吧。
答案 1 :(得分:0)
FWIW:我只是面临完全相同的问题。我有两台服务器使用;一个是仅在Intranet上可用且运行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行。其他元素都被正确接收。
由于它将在生产中起作用,所以我将停止尝试将它包裹住。