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
image

取值
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) {
		
	}
}
正文到此结束
评论插件初始化中...
Loading...