Итак, я пытаюсь получить очень большой массив JSON с моего сервера PHP.
Дело в том, что мне бы очень хотелось иметь индикатор выполнения (массив может доходить до нескольких МБ)
Теперь, сначала я изо всех сил пытался получить 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();
В любом случае, оба возвращают данные, но оба обрезают их.
На вкладке «Сеть» я заметил, что данные сами по себе составляют около 70 КБ. Однажды я включил application/json
заголовок превратился в 572КБ.
Отправка без 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
Задача ещё не решена.
Других решений пока нет …