引用(强调我的)MDNFormData
:
该 接口提供了一种轻松构造一组代表表单字段及其值的键/值对的XMLHttpRequest.send()
方法,然后可以使用该方法轻松发送该键/值对。。
因此,使用时FormData
您将自己锁定在multipart/form-data
。无法将FormData
对象作为正文发送并且 不 发送multipart/form-data
格式的数据。
如果要发送数据,则application/x-www-form- urlencoded
必须将正文指定为URL编码的字符串,或者传递一个URLSearchParams
对象。不幸的是,后者不能直接从form
元素初始化。如果您不想自己遍历表单元素( 可以使用进行遍历HTMLFormElement.elements
),则还可以URLSearchParams
从FormData
对象创建一个对象:
const data = new URLSearchParams();
for (const pair of new FormData(formElement)) {
data.append(pair[0], pair[1]);
}
fetch(url, {
method: 'post',
body: data,
})
.then(…);
请注意,您无需自己指定Content-Type
标题。
可以直接创建URLSearchParams
和传递FormData
对象,而不是将值附加到循环中:
const data = new URLSearchParams(new FormData(formElement));
尽管它在浏览器中仍具有一些实验性支持,所以请确保在使用前对其进行正确测试。