来自PHP的大型JSON响应被浏览器截断

时间:2019-01-21 15:55:31

标签: php json

我有一个托管的PHP应用程序,该应用程序回显了一个较大的JSON字符串,而Mozilla突然开始在开发工具中显示以下错误:

SyntaxError: JSON.parse: bad Unicode escape at line 1 column 1048577 of the JSON data

(尝试使用chrome和Mozilla,但两者均失败,只有Chrome没有显示任何错误)

如果减小响应大小,则问题消失。

在前面,代码是这样的(为了清楚起见,删除了一些内容)

function DataManager() {

$http.get("datamanager.php")
        .success(function (data) {
            $scope.fulldata = data.fulldata;
            $scope.datagroups = data.datagroups;        
            //More code.......      
        })
        .error(function (data, status, headers, config) {
            //Code removed.....
        });

}

在后面,有一个PHP脚本正在运行,该脚本生成一个“ echo”并返回JSON数据。

 $fulldata = json_encode($treedata);
$datagroups = json_encode($datagroups);

header('Content-Type: application/json');

echo '{ "fulldata" : ' . $fulldata . ","
. ' "datagroups" : ' . $datagroups
. "}";
die;

添加了error_log检查,使用file_put_contents将JSON结果保存到文件中,这非常好。将其上传到在线JSON检查工具,没有错误。

试图找到有关响应大小的任何PHP / Apache限制,但没有运气。 检查DB / JSON数据中是否存在奇怪的字符或任何看起来可疑但找不到的东西。

我的主机使用了fail2ban和mod_security,它们会影响PHP响应大小吗?

无法使用分页样式(Page1 ..... Page X),需要完整的数据。我们已经开始进行更改,以便以小于1M的块发送数据。

欢迎提出任何想法。

1 个答案:

答案 0 :(得分:0)

请考虑以下最大响应大小的先前响应(这是服务器端的,但客户端是相似的):

Limit on the length of the data that a webserver can return in response to a GET request

但是,从设计的角度来看,我建议您将基于JSON的API设计为“分页”,这样就不必期望一次返回的数据量大于或等于一兆字节。 “不要靠近栅栏。”