用于检查和修改的 FormData 方法

FormData 是 XHR 用户最好的朋友,Chrome 50 将对其进行升级。 我们将添加一些方法,让您可以在事后检查 FormData 对象或对其进行修改。 您现在可以使用 get()delete() 以及 entrieskeys 等迭代帮助程序。(查看完整列表。)

如果您尚未使用 FormData,不妨看看这个简单且受支持的 API,让您能够以编程方式构建虚拟表单,并使用 window.fetch()XMLHttpRequest.send(formData) 将其发送到较远的地方。

如需了解一些示例,请继续阅读!

像解析真实表单一样专业

FormData 可以通过真实的 HTML 形式构建,并截取其所有当前值的快照。 不过,该对象曾经是完全不透明的。您所能做的就是将其原封不动地发送到服务器。 现在,您可以获取、修改、 bop、观察、缩小和更改,最后上传:

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});