Почему progress срабатывает лишь перед получением результата?
Есть вот такой код:
function send(event, php){
console.log("Отправка запроса");
event.preventDefault ? event.preventDefault() : event.returnValue = false;
var req = new XMLHttpRequest();
req.open('POST', php, true);
req.onload = function() {
if (req.status >= 200 && req.status < 400) {
json = JSON.parse(this.response); // Ебанный ie11
console.log(json);
// ЗДЕСЬ УКАЗЫВАЕМ ДЕЙСТВИЯ В СЛУЧАЕ УСПЕХА ИЛИ НЕУДАЧИ
if (json.result == "success") {
// Если сообщение отправлено
alert("Сообщение отправлено");
} else {
// Если произошла ошибка
alert("Ошибка. Сообщение не отправлено");
}
} else {alert("Ошибка сервера. Номер: "+req.status);}};
req.onerror = function() {alert("Ошибка отправки запроса");};
req.send(new FormData(event.target));
}
Мне нужно подкрутить к этой функции прогресс загрузки. Я дописала эти строки:
req.onprogress = function(event) {
console.log(event);
}
Но почему-то этот прогресс срабатывает лишь перед самим получением результата. Сложно объяснить, но грубо говоря: жмёшь > ждёшь секунд 5 > потом за одну секунду в console записывается десяток (в зависимости от размера файла) строк > и потом сразу срабатывает alert.
Вообще я предполагала, что это должно происходить по мере загрузки, а не в один момент, в виде полного отчёта. Может быть я допустила какую-то ошибку?
Ответы (1 шт):
Запрос XMLHttpRequest состоит из двух фаз:
Стадия отправки (upload). На ней данные загружаются на сервер. Эта фаза может быть долгой для POST-запросов. Для отслеживания прогресса на стадии отправки существует объект типа XMLHttpRequestUpload, доступный как xhr.upload и события на нём.
Стадия скачивания (download). После того, как данные загружены, браузер скачивает ответ с сервера. Если он большой, то это может занять существенное время. На этой стадии используется обработчик xhr.onprogress.
боле подробнее читайте тут
Если вам нужен прогресс на стадии отправки то используйте
xhr.upload.onprogress