Я использую ajax для загрузки файлов. После того, как файл загружен, php должен проверить его (mime, размер, вирус (clamscan) и т. Д.) - для больших файлов требуется несколько секунд. Пока файл загружается, HTML5 <progress>
заполняется, когда файл готов, и PHP начинает проверку, прогресс должен переключиться на неопределенный. Я додумался способов сделать это (что и делают не работы):XMLHttpRequest Уровень 2 - Определить, если загрузка завершена
Проверка событие upload.onload
xhr.upload.addEventListener("load", function (e) {
$("#uploadprogress").attr("value", false);
$("#uploadprogress").attr("max", false);
$("#progress").text("Checking file...");
});
Это не работает, потому что onload
-Event firest когда запрос готов, а не когда загрузка готова.
Проверка процесса загрузки в процентах = 100%
xhr.upload.addEventListener("progress", function (e) {
if (e.lengthComputable && e) {
p = (e.loaded/e.total);
if (p==1) {
$("#uploadprogress").attr("value", false);
$("#uploadprogress").attr("max", false);
$("#progress").text("Checking file...");
} else {
var percent = Math.ceil(p * 1000)/10;
$("#uploadprogress").val(e.loaded);
$("#uploadprogress").attr("max", e.total);
$("#progress").text("Uploading... " + percent + "%");
}
}
}
});
Это не работает, потому что процент загрузки иногда останавливается на прибл. 97%, несмотря на то, что загрузка завершена, и PHP начинает обрабатывать файлы
Есть ли еще возможность проверить это?
Но я не хочу проверять, закрыто ли соединение, потому что после завершения загрузки PHP проверяет файл, который занимает ок. 10 секунд и возвращается с некоторыми JSON. Когда PHP начинает проверять файл (= когда загрузка завершена), индикатор выполнения должен переключиться на 'неопределенный' – ninov
, когда файл завершит передачу, начнется событие' loadend'/'load', когда ваш скрипт завершит проверку файла (который когда PHP закрывает соединение) событие 'readystatechange' запускается с' readyState === 4'. поэтому для ваших целей переключите индикатор выполнения на 'indetermined' на событие' readystatechange'. см .: https://gist.github.com/anonymous/5208652 – zertosh
Не работает. Это мой JS: https://gist.github.com/anonymous/2a2fef447399a3b8e734 Представьте, что скрипт PHP - это просто 'sleep (10);'. Теперь я хочу показать индикатор состояния «неопределенный» за эти 10 секунд – ninov