所以,我正试图从我的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