在纯javascript中非常简单:只需将回调附加到{XMLHTTPRequest}.onprogress
var xhr = new XMLHttpRequest();
xhr.onprogress = function(e){
if (e.lengthComputable)
var percent = (e.loaded / e.total) * 100;
};
xhr.open('GET', 'http://www...', true);
xhr.onreadystatechange = function() {
...
};
xhr.send(null);
但是我正在做一个用JQuery ($.get()
或$.ajax()
)下载html数据的ajax站点,我想知道哪种方法是获得请求进度的最好方法,以便用一个小进度条显示它,但奇怪的是,我在JQuery文档中没有发现任何有用的东西……
发布于 2013-10-02 06:27:09
类似于$.ajax
的代码(但仅限HTML5):
$.ajax({
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
//Do something with upload progress here
}
}, false);
xhr.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
//Do something with download progress
}
}, false);
return xhr;
},
type: 'POST',
url: "/",
data: {},
success: function(data){
//Do something on success
}
});
发布于 2015-08-28 21:50:24
jQuery已经实现了promises,所以最好使用这项技术,不要将事件逻辑转移到options
参数。我做了一个jQuery插件,添加了进度承诺,现在它和其他承诺一样容易使用:
$.ajax(url)
.progress(function(){
/* do some actions */
})
.progressUpload(function(){
/* do something on uploading */
});
在github上查看它
发布于 2013-10-02 06:26:10
jQuery有一个AjaxSetup()
函数,它允许您为所有ajax调用注册全局ajax处理程序,如beforeSend
和complete
,并允许您访问xhr
对象来执行您正在寻找的进程
https://stackoverflow.com/questions/19126994
复制相似问题