能否通过进度条来测量jQuery.get()方法的进度?
能否通过进度条来测量jQuery.get()方法的进度?
在当前版本的jQuery中,这不是开箱即用的功能,但只需付出一点努力仍然可以实现。
您应该监听XMLHttpRequest
的progress
事件,jQuery提供了访问此事件的方法。以下是来自Dave Bond博客的示例链接:
$.ajax(
{
type: 'POST', // 'POST' here so that _upload_ progress _also_ makes sense;
// Change to 'GET' if you need.
url: "/", data: {},
beforeSend: function(XMLHttpRequest)
{
//Upload progress
XMLHttpRequest.upload.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
//Do something with upload progress
}
}, false);
//Download progress
XMLHttpRequest.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
//Do something with download progress
}
}, false);
},
success: function(data){
// successful completion handler
}
});
这里是有关 XMLHttpRequest
的progress
事件的文档链接。
您可能还想看看jquery.ajax-progress插件,以避免自己编写代码。
注释:
一些旧的浏览器可能不支持progress
事件。
要计算下载进度,您必须知道要下载的资源的大小,即服务器必须发送Content-length
HTTP标头。如果大小未知,则无法计算进度。这就是progress
事件的lengthComputable
属性的作用。
$.get()
并以此方式更新进度条来使服务器响应调用。function get_chunk(chunk_number, max_chunks){
$.get('eg.php?chunk=' + chunk_number, function(){
chunk_number++;
if(chunk_number < max_chunks){
get_chunk(chunk_number, max_chunks)
}
update_status_bar(chunk_number, max_chunks);
}
}