我正在使用ajax进行文件上传。文件上传完成后,php应该检查它的mime、大小、病毒(clamscan)等,对于较大的文件可能需要几秒钟的时间。在上传文件时,HTML5的<progress>
会填充进度条,当文件准备好并且PHP开始检查时,进度条应该切换到不确定状态。我想过两种方法来实现这一点(它们都不起作用):
检查upload.onload事件
xhr.upload.addEventListener("load", function (e) {
$("#uploadprogress").attr("value", false);
$("#uploadprogress").attr("max", false);
$("#progress").text("Checking file...");
});
这不起作用,因为onload
事件在请求准备就绪时触发,而不是上传完成时触发。
检查上传进度百分比是否为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开始处理文件,因此这不起作用。
还有其他检查的可能性吗?
loadend
/load
事件会触发,当您的脚本完成对文件的检查(也就是PHP关闭连接时),readystatechange
事件会触发,其readyState===4
。因此,为了您的目的,在readystatechange
事件中将进度条切换为“不确定状态”。请参见:https://gist.github.com/anonymous/5208652 - zertoshsleep(10);
。现在我想为这10秒显示一个"不确定"的进度条。 - ninovload
/loadend
/readyState 4
。 - zertosh