javascript — настройка ответа на разрывы содержимого

Итак, я пытаюсь получить очень большой массив 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

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]