FormData 是 XHR 用户的最佳助手,它将在 Chrome 50 中进行升级。
我们正在添加一些方法,以便您检查 FormData 对象或在事后对其进行修改。
您现在可以使用 get()、delete() 以及 entries、keys 等迭代辅助函数。(查看完整列表)
如果您尚未使用 FormData,它是一个简单、支持良好的 API,可让您以编程方式构建虚拟表单,并使用 window.fetch() 或 XMLHttpRequest.send(formData) 将其发送到远端。
请继续阅读,了解一些示例!
像专业人士一样解析真实表单
FormData 可以通过真实的 HTML 表单构建,并捕获其所有当前值的快照。不过,该对象过去是完全不透明的。您只能将其原封不动地发送到服务器。
现在,您可以获取、修改、观察、缩小、更改该图片,并最终上传该图片:
function sendRequest(theFormElement) {
var formData = new FormData(theFormElement);
formData.delete("secret_user_data"); // don't include this one!
if (formData.has("include_favorite_color")) {
formData.set("color", userPrefs.getColor());
}
// log all values like <input name="widget">
console.info("User selected widgets", formData.getAll("widget"));
window.fetch(url, {method: 'POST', body: formData});
}
您还可以通过旧版 XMLHttpRequest 发送 FormData:
var x = new XMLHttpRequest();
x.open('POST', url);
x.send(formData);
不要丢弃 FormData
如果您是从头开始构建自己的 FormData,可能会因为无法重复使用而感到沮丧,毕竟您在这些字段上花费了大量时间!
由于 window.fetch() 和 XMLHttpRequest.send() 方法都会创建 FormData 的快照,因此您现在可以安全地重复使用和修改您的工作成果!
请看以下示例:
// append allows multiple values for the same key
var formData = new FormData();
formData.append("article", "id-123");
formData.append("article", "id-42");
// send like request
formData.set("action", "like");
window.fetch(url, {method: 'POST', body: formData});
// send reshare request
formData.set("action", "reshare"); // overrides previous "action"
window.fetch(url, {method: 'POST', body: formData});