XHR2:让使用纯JS实现上传进度条变成了可能

早期我们想要实现上传进度条的话一般要借助插件如flash/silverlight,不过现在我们用纯JS来实现了,下面是XMLHttpRequest Level 2的一些新特性:

  • 设置过期时间
  • 使用FormData更好的数据托管
  • 传送二进制流
  • 添加了发送进度改变事件,可以侦听发送了多少字节。
  • 允许安全跨域,类似于加载其他域的script.
  • 可复写加载内容的MIME type和编码


XHR的事件例表:

attribute type Explanation
onloadstart loadstart When the request starts.
onprogress progress While loading and sending data.
onabort abort When the request has been aborted, either by invoking the abort() method or navigating away from the page.
onerror error When the request has failed.
onload load When the request has successfully completed.
ontimeout timeout When the author specified timeout has passed before the request could complete.
onloadend loadend When the request has completed, regardless of whether or not it was successful.


示例代码:

var xhr = new XMLHttpRequest();

var onProgressHandler = function(event) {
  if(event.lengthComputable) {
    var howmuch = (event.loaded / event.total) * 100;
    document.querySelector('progress').value = Math.ceil(howmuch);
  } else {
    console.log("Can't determine the size of the file.");
  }
}

var onLoadHandler = function() {
  displayLoadedMessage();
}

var onErrorHandler = function() {
  displayErrorMesssage();
}

xhr.upload.addEventListener('progress', onProgressHandler, false);
xhr.upload.addEventListener('load', onLoadHandler, false);
xhr.upload.addEventListener('error', onErrorHandler, false);

var onReadyStateHandler = function(event) {
  if( event.target.readyState == 4 && event.target.status == 200){
   
  }
}

xhr.open('POST','/path_to_data');
xhr.onreadystatechange = onReadyStateHandler;
xhr.send(dataToSend);
更详细的可查看Opera上面的一篇技术文章 :
http://dev.opera.com/articles/view/xhr2/

转载于:https://my.oschina.net/pandao/blog/96459

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值