面的代码创建了一个空的 FormData 对象:
var formData=new FormData(); // Currently empty
FormData.append()
FormData 接口的 append() 方法会添加一个新值到 FormData 对象内的一个已存在的键中, 如果键不存在则会添加该键。
你可以通过 FormData.append 往对象里加入键值对:
formData.append('username', 'Chris');
formData.append('userpic', myFileInput.files[0], 'chris.jpg');
跟常规表单数据一样,你可以使用同一个名称添加多个值 。例如 (为了与PHP命名习惯一致在名称中添加了[]):
formData.append('userpic[]', myFileInput1.files[0], 'chris1.jpg');
formData.append('userpic[]', myFileInput2.files[0], 'chris2.jpg');
实例: 如何清空FormData对象的数据?
HTML区:
<div class="form-group">
<label for="avatar">头像<img class="avatar" width="80px" height="80px"
src="{% static 'image/head/default.png' %}"
alt="图片未加载出"></label>
<input type="file" id="avatar" style="display: none">
</div>
JS代码区
<script>
{#替换头像位置图片方法#}
$('#avatar').change(function () {
{#jquery对象转换为DOM对象#}
var choose_file=$(this)[0].files[0];
{#创建一个阅读器对象#}
var reader=new FileReader();
{#读取choose_file的文件对象#}
reader.readAsDataURL(choose_file);
{#上面代码加载完再运行函数内代码(原因:图片未加载完下面的代码就有可能执行完了)#}
reader.onload=function () {
{# 路径的值在reader.result中#}
$('.avatar').attr("src", reader.result)
}
}
)
</script>
PS:注意务必要引入jQuery样式
#python##Python入门推荐#
FormData类型其实是在XMLHttpRequest 2级定义的,它是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利。
创建一个formData对象实例有几种方式
1、创建一个空对象实例
var formData=new FormData();
此时可以调用append()方法来添加数据
2、使用已有的表单来初始化一个对象实例
假如现在页面已经有一个表单
<form id="myForm" action="" method="post">
<input type="text" name="name">名字
<input type="password" 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","kshdfiwi3rh");
首先,我们要明确formData里面存储的数据形式,一对key/value组成一条数据,key是唯一的,一个key可能对应多个value。如果是使用表单初始化,每一个表单字段对应一条数据,它们的HTML name属性即为key值,它们value属性对应value值。
我们可以通过get(key)/getAll(key)来获取对应的value,
formData.get("name"); // 获取key为name的第一个值
formData.get("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", "1");
formData.getAll("k1"); // ["1"]
我们可以通过has(key)来判断是否对应的key值
formData.append("k1", "v1");
formData.append("k2",null);
formData.has("k1"); // true
formData.has("k2"); // true
formData.has("k3"); // false
通过delete(key),来删除数据
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k1", "v1");
formData.delete("k1");
formData.getAll("k1"); // []
我们可以通过entries()来获取一个迭代器,然后遍历所有的数据,
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k2", "v1");
var i=formData.entries();
i.next(); // {done:false, value:["k1", "v1"]}
i.next(); // {done:fase, value:["k1", "v2"]}
i.next(); // {done:fase, value:["k2", "v1"]}
i.next(); // {done:true, value:undefined}
可以看到返回迭代器的规则
我们也可以通过values()方法只获取value值
formData.append("k1", "v1");
formData.append("k1", "v2");
formData.append("k2", "v1");
var i=formData.entries();
i.next(); // {done:false, value:"v1"}
i.next(); // {done:fase, value:"v2"}
i.next(); // {done:fase, value:"v1"}
i.next(); // {done:true, value:undefined}
我们可以通过xhr来发送数据
var xhr=new XMLHttpRequest();
xhr.open("post","login");
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(formData);
这种方式可以来实现文件的异步上传。
浏览器兼容性查询:https://caniuse.com/#search=formdata
英文文档:https://developer.mozilla.org/en-US/docs/Web/API/FormData
转自:https://segmentfault.com/a/1190000006716454
*请认真填写需求信息,我们会在24小时内与您取得联系。