da宗熊

当前位置: 首页 / 笔记

FormData、XMLHttpRequest带进度的上传

10-15,2015 / da宗熊

Tags: 前端

FormData 是 h5 的新对象,可以自由组装为一个新的表单对象,用于XMLHttpRequest的提交。

此对象非常简单,只有一个 append 方法:

var fd = new FormData();
fd.append("name", "da宗熊");
// 或
fd.append("file", file对象);

而在 XMLHttpRequest对象中,也新增了 upload 对象:

var xhr = new XMLHttpRequest();
var upload = xhr.uplad;

其中 upload 对象,有着好几个 onXXX 的方法:
upload对象

也可以通过 addEventListener,添加相关的监听。
而需要添加 进度 的监听,则是这样子:

xhr.upload.addEventListener("progress", function(event){
    // event 中,包含了 total 总字节,loaded 已经上传的字节
}, false);

对于 XMLHttpRequest 对象,有几个 方法,也是平时没怎么留意的:
xhr方法

其中:

1、abort 取消请求

xhr.onabort = function(){
   // 取消的回调
};
// 取消当前请求
xhr.abort();

2、error 请求发生错误

3、load 请求完成

4、loadend 请求完毕,无论成功还是失败

5、progress 请求的进度,但是没法获取 total,只有loaded的数据,要完整进度,还是需要 xhr.upload.onprogress

6、readyState 请求的状态

0 --> 还没调用send
1 --> 已经调用send,正在开始发送
2 --> send方法执行完毕,已经收到了全部需要发送的内容
3 --> 收到响应,并且在解析响应的内容
4 --> 响应解析完毕,客户端可以使用了

7、status 请求的返回码

200 --> 成功
302 --> 没有修改
500 --> 服务器错误
301 --> 重定向
404 --> 找不到

一般而言,判定请求是否完成,需要这样子:

xhr.onreadystatechange = function(){
   if(xhr.readyState == 4 && xhr.status == 200){
       console.log("请求完成", xhr.responseText);
   }
};

8、withCredentials 如果是跨域请求,是否带上cookie信息,默认是不带上

@2022 da宗熊
Email: 1071093121@qq.com