惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
Arctic Wolf
博客园 - 聂微东
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
小众软件
小众软件
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
L
LangChain Blog
A
About on SuperTechFans
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
T
The Blog of Author Tim Ferriss
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Palo Alto Networks Blog
Scott Helme
Scott Helme
S
Secure Thoughts
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
P
Privacy & Cybersecurity Law Blog
O
OpenAI News
H
Heimdal Security Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Help Net Security
Help Net Security
C
Cyber Attacks, Cyber Crime and Cyber Security
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
G
Google Developers Blog
博客园 - Franky
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
Kaspersky official blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Tor Project blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tenable Blog
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives

博客园 - MK2

cnpmcore 超大 JSON parse 性能优化 基于 Postgres 实现一个 Job Queue Graceful exit with cluster and pm Use Blanket.js instead of jscover 使用 connect-domain 捕获异步调用中出现的异常 Defense hash algorithm collision 防御hash算法冲突导致拒绝服务器 fibonacci(40) benchmark [nodejs]保证你的程序死了还能复活:forever and forever webui [nodejs]Buffer vs String Nodejs "Hello world" benchmark npm 资源库镜像 NodeBlog v0.2.0 更新说明 关于__proto__的链式记忆 NAE支持自定义域名了 Nodejs 离线文档下载 nodejs读写大文件 Nodejs HTTP请求的超时处理(Nodejs HTTP Client Request Timeout Handle) 关于Nodejs中Buffer释放的二三事 nodejs web开发入门: Simple-TODO Nodejs 实现版
在jQuery 1.5+ 的jqXHR上监听文件上传进度(xhr.upload)
MK2 · 2011-08-05 · via 博客园 - MK2

XMLHttpRequest.upload

在Firefox, Google Chrome and Safari中,如果通过XMLHttpRequest上传文件,
是可以通过监听XMLHttpRequest.upload对象的progress事件来查看进度的。

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", function (evt) {
    // display uploading progress infomation...
});

xhr.upload在jQuery中消失了?

在看完JQuery最佳实践后,
决定使用最新版本的jQuery 1.6.2替换一下正在使用的1.4.2,果然,性能在感觉上有提升。
可是悲剧的发现,怎么上传文件的进度不见了。调试发现,原来xhr.upload不见了。

查看jQuery的jqXHR文档,
发现jqXHR不是XMLHttpRequest的简单扩展。

怎样才能拿到原始的XMLHttpRequest?

只要在$.ajax请求中拿到原始的XMLHttpRequest,然后监听upload对象的progress事件,就可以解决此问题了。
于是乎,为了拿到原始的XMLHttpRequest,我们需要写一小段代码。

根据jQuery.ajax文档,xhr是可以自己提供的:

xhr: Function
    Default: ActiveXObject when available (IE), 
    the XMLHttpRequest otherwise Callback for creating 
    the XMLHttpRequest object. 
    Defaults to the ActiveXObject when available (IE), 
    the XMLHttpRequest otherwise. 
    Override to provide your own implementation for 
    XMLHttpRequest or enhancements to the factory.

于是,我们就可以自己提供xhr,然后设置progress事件:

function onprogress(evt) {
    // display uploading progress infomation...
};
var xhr_provider = function() {
    var xhr = jQuery.ajaxSettings.xhr();
    if(onprogress && xhr.upload) {
        xhr.upload.addEventListener('progress', onprogress, false);
    }
    return xhr;
};

$.ajax({
    url: url,
    timeout: 5*60*1000,
    type : 'post',
    data: bb.getBlob(),
    contentType: 'multipart/form-data; boundary=' + boundary,
    processData: false,
    xhr: xhr_provider,
    success: function() {},
    error: function() {}
});

有爱

其实本文主要目的是推广"JQuery最佳实践",
赶紧看,然后赶紧看看自己如何使用jQuery的。

希望本文对你有用。 ^_^