对于上传的字节,这很容易。只需监视事件即可。浏览器知道它必须上传的文件的大小和上传数据的大小,因此它可以提供进度信息。xhr.upload.onprogress
对于下载的字节(获取信息时),这有点困难,因为浏览器不知道在服务器请求中将发送多少字节。在这种情况下,浏览器唯一知道的是它接收的字节的大小。xhr.responseText
有一个解决方案,在服务器脚本上设置一个标头就足够了,以便获得浏览器将要接收的字节的总大小。Content-Length
欲了解更多信息,请访问 https://developer.mozilla.org/en/Using_XMLHttpRequest。
示例:我的服务器脚本读取 zip 文件(需要 5 秒钟):
$filesize=filesize('test.zip');
header("Content-Length: " . $filesize); // set header length
// if the headers is not set then the evt.loaded will be 0
readfile('test.zip');
exit 0;
现在我可以监视服务器脚本的下载过程,因为我知道它的总长度:
function updateProgress(evt)
{
if (evt.lengthComputable)
{ // evt.loaded the bytes the browser received
// evt.total the total bytes set by the header
// jQuery UI progress bar to show the progress on screen
var percentComplete = (evt.loaded / evt.total) * 100;
$('#progressbar').progressbar( "option", "value", percentComplete );
}
}
function sendreq(evt)
{
var req = new XMLHttpRequest();
$('#progressbar').progressbar();
req.onprogress = updateProgress;
req.open('GET', 'test.php', true);
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4)
{
//run any callback here
}
};
req.send();
}