FormData - 用于构造一组表示表单字段及其值的键/值对
FormData 接口提供了一种方法,可以轻松构造一组表示表单字段及其值的键/值对,然后可以使用 XMLHttpRequest.send() 方法轻松地发送它。如果编码类型设置为 "multipart/form-data",它使用与表单相同的格式。
实现 FormData 的对象可以直接用于 for...of 结构,而不用 entries(): for (var p of myFormData)(相当于 for (var p of myFormData.entries()))。
注意:该功能在 Web Workers 中可用。
构造函数
 FormData()
创建一个新的 FormData 对象。
方法
 FormData.append()
将新值附加到 FormData 对象内的现有键中,或者如果该键尚不存在则添加该键。
 FormData.delete()
从 FormData 对象中删除键/值对。
 FormData.entries()
返回 iterator,允许遍历该对象中包含的所有键/值对。
 FormData.get()
返回与 FormData 对象中的给定键关联的第一个值。
 FormData.getAll()
返回与 FormData 中的给定键关联的所有值的数组。
 FormData.has()
返回一个布尔值,说明 FormData 对象是否包含某个键。
 FormData.keys()
返回 iterator,允许遍历该对象中包含的键/值对的所有键。
 FormData.set()
为 FormData 对象内的现有键设置新值,或者添加键/值(如果它尚不存在)。
 FormData.values()
返回 iterator,允许遍历该对象中包含的所有值。
规范
| 规范 | 状态 | 备注 | 
|---|---|---|
| XMLHttpRequest FormData 的定义  | 
现行的标准 | FormData 在 XHR 规范中定义 | 
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | 
|---|---|---|---|---|---|---|
| 基础支持 | 7 | 支持 | 42 | 10 | 12 | 5 | 
append | 
7 | 支持 | 42 | 103 | 12 | 5 | 
delete | 
50 | 不支持 | 39 | 不支持 | 支持 | 支持 | 
get | 
50 | 不支持 | 39 | 不支持 | 支持 | 支持 | 
getAll | 
50 | 不支持 | 39 | 不支持 | 支持 | 支持 | 
has | 
50 | 不支持 | 39 | 不支持 | 支持 | 支持 | 
set | 
50 | 不支持 | 39 | 不支持 | 不支持 | 支持 | 
entries | 
50 | 不支持 | 44 | 不支持 | 支持 | 支持 | 
keys | 
50 | 不支持 | 44 | 未知 | 支持 | 支持 | 
values | 
50 | 不支持 | 44 | 未知 | 未知 | 支持 | 
Support of for...of
 | 
50 | 不支持 | 44 | 未知 | 未知 | 支持 | 
| Available in workers | 支持 | 支持 | 39 | 不支持 | 支持 | 支持 | 
移动浏览器兼容性
| 特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari | 
|---|---|---|---|---|---|---|---|
| 基础支持 | 支持1 | 支持 | 支持 | 4 | 未知 | 12 | 未知 | 
append | 
31 | 未知 | 支持 | 42 | 未知 | 12 | 未知 | 
delete | 
未知 | 50 | 不支持 | 支持 | 未知 | 支持 | 不支持 | 
get | 
未知 | 50 | 不支持 | 支持 | 未知 | 支持 | 不支持 | 
getAll | 
未知 | 50 | 不支持 | 支持 | 未知 | 支持 | 不支持 | 
has | 
未知 | 50 | 不支持 | 支持 | 未知 | 支持 | 不支持 | 
set | 
未知 | 50 | 不支持 | 支持 | 未知 | 不支持 | 不支持 | 
entries | 
未知 | 50 | 不支持 | 44 | 未知 | 支持 | 未知 | 
keys | 
未知 | 50 | 不支持 | 44 | 未知 | 未知 | 未知 | 
values | 
未知 | 50 | 不支持 | 44 | 未知 | 未知 | 未知 | 
Support of for...of
 | 
未知 | 50 | 不支持 | 44 | 未知 | 未知 | 未知 | 
| Available in workers | 支持 | 支持 | 支持 | 支持 | 未知 | 支持 | 不支持 | 
1. Android 4.0 中的 XHR,FormData 为 blob 时,发送的内容为空。
2. 在 Firefox 7 之前,将 Blob 数据附加到对象时,Content-Disposition HTTP 标头中的文件名会变为空字符串,导致某些服务器出错。从 Firefox 7 开始,将 blob 作为文件名会正常发送。
3. 通过启用 “将文件上载到服务器时包含本地目录” 选项,IE 将动态更改 Blob 内的文件名。要直接控制发送的文件名,开发人员应将文件名作为第三个参数值发送,即 formData.append(name, value, filename)。