Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery/PHP:使用Ajax传递JSON数据最终被截断_Javascript_Php_Jquery_Ajax_Json - Fatal编程技术网

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

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){

我正在使用ajax传递一个相当大但不是很大的Json对象,并使用PHP将其写入一个文件。$.post命令工作正常,但是文件中的数据被截断,尽管仍然是完美的JSON格式

我不明白为什么

下面是JavaScript命令。输出是数组中包含数组的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是有效的。所以是变量被截断了。不是文件本身


有什么想法吗?

今天早上通过一个被截断的大数组时遇到类似问题;最后,使用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的调用替换它。我试过了。它似乎不起作用。