Jquery / PHP:使用Ajax传递JSON数据最终被截断

时间:2014-04-08 16:27:31

标签: javascript php jquery ajax json

我使用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是有效的。所以这是被截断的变量。不是文件本身。

有什么想法吗?

2 个答案:

答案 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行。其他元素都被正确接收。

由于它将在生产中起作用,所以我将停止尝试将它包裹住。