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

推荐订阅源

H
Hacker News: Front Page
博客园_首页
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
Microsoft Azure Blog
Microsoft Azure Blog
Recorded Future
Recorded Future
博客园 - Franky
Application and Cybersecurity Blog
Application and Cybersecurity Blog
U
Unit 42
S
Secure Thoughts
博客园 - 司徒正美
美团技术团队
C
Cisco Blogs
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
V
Vulnerabilities – Threatpost
T
Troy Hunt's Blog
S
Security Affairs
爱范儿
爱范儿
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
T
Threatpost
F
Fortinet All Blogs
Scott Helme
Scott Helme
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
O
OpenAI News
S
Schneier on Security
Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
AI
AI
D
DataBreaches.Net
PCI Perspectives
PCI Perspectives
T
Tailwind CSS Blog
Martin Fowler
Martin Fowler
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
腾讯CDC
T
Tenable Blog
人人都是产品经理
人人都是产品经理
Recent Announcements
Recent Announcements
C
Cyber Attacks, Cyber Crime and Cyber Security
Jina AI
Jina AI
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
S
Securelist
P
Proofpoint News Feed
L
LINUX DO - 最新话题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 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的。

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