Методы FormData для проверки и модификации

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

Вы также можете отправить FormData через старый XMLHttpRequest :

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