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');
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值
//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) { } }