js FormData的使用
概述
FormData对象的使用:
1,用一些键值对来模拟一系列表单控件: 把form中的所有元素的name和value组成一个QueryString
2,异步上传文件
使用
创建一个空对象实例
var myForm = new FormData();
使用已有的表单进行初始化
<form id="myForm" action="" method="post">
<input type="text" name="name" />名字
<input type="text" name="psw" />密码
<input type="submit" value="提交" />
</form>
可以使用这个表单作为初始化参数,来实例化FormData对象
//获取页面已有的一个form表单
var form = document.getElementById('myForm');
//用表单来初始化
var formData = new FormData(form);
//我们可以根据name来访问表单中的字段
var name = formData.get('name')//获取名字
var psw = formData.get('psw')//获取密码
//在此基础上添加其他数据
formData.append('token','kshd3iwich');
formData的操作
FormDdata中的数据类似Map<String,Object>,操作也类似map
取值
formData.get('name');//获取key为name的第一个值
formData.getAll('name');//返回一个数组,获取key为name的所有值
添加数据
通过append(key,value)来添加数据,如果指定的key不存在则会新增一条数据,如果key存在则添加到数据的末尾
formData.append("k1","v1");
formData.append("k1","v2");
formData.append("k1","v1");
formData.get('k1');//v1
formData.getAll('k1')//[v1,v2,v1]
设置修改数据
通过set(key,value)来设置修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值
formData.append('k1','v1');
formData.set('k1','v2');
formData.getAll('k1')//[v2]
判断是否有改数据
formData.append('k1','v1');
formData.append('k2','v2');
formData.has('k1');//true
formData.has('k2');//true
formData.has('k3');//false
删除数据
formData.append('k1','v1');
formData.append('k2','v2');
formData.has('k1');//true
formData.delete('k1');
formData.has('k1');//false
遍历
formData.append('k1','v1');
formData.append('k2','v2');
formData.append('k3','v3');
let i = formData.entries();
i.next();//{done: false, value: ['k1','v1']}
i.next();//{done: false, value: ['k2','v2']}
i.next();//{done: false, value: ['k3','v3']}
i.next();//{done: true, value: undefined}
说明:
1,每次调用next返回一条数据,数据的顺序由添加的顺序决定
2, 返回的是一个对象, 当done为true时,说明已经遍历完所有的数据,这个也可以作为判断依据
3, 返回的对象的value属性以数组形式存储了一对key/value,数组下标O为key,下标1为value,如果一个key值对应多个value,则返回多对值
也可以通过values只获取value值
发送数据
js发送
//HTML部分
<form action="">
<label for="">
姓名: <input type='text' name='name' />
</label>
<label for="">
文件: <input type='file' name='file' />
</label>
<label for="">
<input type='button' value='保存' />
</label>
</form>
//js部分
//获取按钮
var btn = document.querySelector('[type = file]');
//新建表单数据
var formData = new FormData();
//取得input中的文件,并将文件添加到表单数据中 input可多选多个文件
formData.append('upload',file.files[0]);
//创建xhr来发送数据
var xhr = new XMLHttpRequest();
//初始化请求参数
xhr.open('post','file.php');
xhr.setRequestHeader('Content-type','applicaiton/x-www-form-urlencoded');//设置请求头的contentType
//监听上传进度
xhr.upload.onprogress = function(event) {
//console.log(event)事件对象
var precent = (event.loaded / event.total) * 100 + '%';
console.log(precent)
progroess.style.width = precent;
}
xhr.send(formData);
xhr.onreadystatechange = function() {
//status200状态表示成功,readyState表示对象传递完毕或者准备就绪
if(xhr.readyState === 4 && xhr.status === 200) {
}
}