设置内容长度中断响应

时间:2017-02-06 22:52:01

标签: javascript php jquery ajax response-headers

所以,我正试图从我的PHP服务器中获取一个非常大的JSON数组。

问题是,我真的非常喜欢它有一个进度条(阵列可以达到几MB)

现在,起初我努力让content-length标题正常工作,因为它需要进步。

然而,现在我已经拥有它,但我一直收到失败的AJAX请求,因为它会关闭关闭JSON数组的尾随},打破所有内容!

我目前的代码:

$response = json_encode($aData);
header("Content-type: application/json");
header('Accept-Ranges: bytes');
header('Content-Length: ' . mb_strlen($response, 'UTF8'));
return $response;

我尝试过的其他事情:

ob_start();
echo json_encode($aData);
$length = ob_get_length();
header("Content-type: application/json");
header('Accept-Ranges: bytes');
header('Content-Length: ' . $length);
ob_flush();

无论哪种方式,两者都返回数据,但都将其切断。

我在网络标签上注意到的是,数据本身就是70KB左右。打开application/json标题后,它变为572KB。

在没有application/json标题的情况下发送它似乎会使数据再次完整,但这也会删除content-length

老实说,我不明白这一点。任何建议/帮助将不胜感激:)

PS 这是ajax调用本身,如果有人需要该信息:

$.ajax({
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        xhr.upload.addEventListener("progress", function (evt) {
            //uploadpercentage stuff
        }, false);
        //Download progress
        xhr.addEventListener("progress", function (evt) {
            //download percentage stuff
        }, false);
        return xhr;
    },
    type: 'POST',
    url: myURL,
    data: {myData: myData}
}).done(function (data) {
  console.log("done");
});

这些是我的回复标题:

Accept-Ranges:bytes
Connection:Keep-Alive
Content-Length:579890
Content-Type:application/json
Date:Tue, 07 Feb 2017 11:29:06 GMT
Keep-Alive:timeout=5, max=87
Server:Apache
X-Powered-By:PHP/7.0.14
X-Powered-By:PleskLin

0 个答案:

没有答案