Upload

最原始方式 form表单提交

// html
<form method="get" action="/test/upload">
<input type="file" name="test" accept="image/jpeg, image/png" />
<input type="submit" value="Submit" />
<!-- <input id="submit" type="button" value ="Submit" /> -->
</form>

兼容性:所有浏览器都支持。

xhr2

关于xhr:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.resopnseText);
}else{
alert(xhr.statusText);
}
} xhr.open('get', 'example.php');
xhr.send();

老版本xhr主要属性:

  • xhr.readyState:XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。
  • xhr.status:服务器返回的状态码,等于200表示一切正常。
  • xhr.responseText:服务器返回的文本数据
  • xhr.responseXML:服务器返回的XML格式的数据
  • xhr.statusText:服务器返回的状态文本。

缺点:

  • 不支持读取和传送二进制文件。
  • 不能进行进度信息跟踪。
  • 受到“同域限制”,只能向同一域名的服务器请求数据。

xhr2

新版本的XMLHttpRequest对象,具有更多的特性:

  • 可以设置HTTP请求的时限
  • 可以使用FormData对象管理表单数据
  • 上传文件
  • 跨域请求
  • 获取服务器二进制数据
  • 可获取数据传输的进度

请求时限

xhr.timeout = 3000;
xhr.ontimeout = function(e){
console.log(e);
}

FormData(HTML5新增属性)

该对象可以模拟表单。

var fdata = new FormData;
var xhr = XMLHttpRequest(); // 添加表单项
fdata.append('username', '张三'); xhr.open('POST', 'test/upload' ); // 最后使用xhr2直接发送该表单对象
xhr.send(fdata); // 也可以用来获取页面的表单 var form = document.getElementById('testForm'); var fData = new FormData(form); fData.append('test', 123); xhr.send(fdata); // 上传文件 fData.append('name', file) // file 为input[type=file] change事件函数返回的file对象

接受二进制数据

progress

新版本xhr对象拥有progress事件。通过onprogress函数监听。

progess事件在该版本中分两种。上传时属于xhr对象,下载时属于xhr.upload对象。


document.getElementById('upload').addEventListener('change', function(){
var file = this.files[0];
var xhr = XMLHttpRequest();
var formdata = new FormData(document.getElementById('form')); formdata.append('test', 123);
formdata.append('file', file); // 监听progress事件了 上传 xhr.upload.onprogress = function(e){
if(event.lengthComputable){
var percentComplete = e.loaded / e.total;
}
}
xhr.open('POST', 'testagain');
xhr.send(formdata); })

其他相关事件:

  • xhr.onload 传输完成
  • xhr.onabort 传输被取消
  • xhr.error 传输中出现错误
  • xhr.onloadstart 开始传输
  • xhr.onloadend 传输结束 但不知道是否成功

最新文章

  1. RecylerView完美实现瀑布流效果
  2. 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置
  3. log4j2 不使用配置文件,动态生成logger对象
  4. WinCE项目应用汇总
  5. 如何使用Profiler跟踪阻塞信息
  6. Linux学习 :中断处理机制 &amp; poll机制
  7. Linux 网络编程详解九
  8. sql server 导出表结构
  9. cassandra CQL 常用操作
  10. [转]用Linq取CheckBoxList選取項目的值
  11. PHP高级笔记汇总
  12. Windows下移动硬盘无法识别但是Mac下可以识别
  13. 网站集成QQ登录功能(转)
  14. jQuery常用代码片段
  15. hibernate之映射文件VS映射注解
  16. Python学习日记day10------函数的命名空间、作用域与闭合函数
  17. Asp,NET控制文件上传的大小
  18. Connection to Oracle failed. [66000][12505] Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor .
  19. Balanced Ternary String CodeForces - 1102D (贪心+思维)
  20. 中文乱码与字体库windows

热门文章

  1. 03.CSS选择器--&gt;交集并集选择器
  2. MD5计算器
  3. MySQL数据库更改默认引擎为Innodb【配置】
  4. MapReduce两种执行环境介绍:本地测试环境,服务器环境
  5. Java 之集合框架 上(9)
  6. Python函数汇总(陆续更新中...)
  7. 数据分析之pandas常见的数据处理(四)
  8. DW数据库整理设置
  9. OSG3.0.1的编译
  10. ZT A2DP协议笔记