JavaScript FormData — надсилання форми з JavaScript


FormData збирає дані форми — включно з файлами — у формат, який сервер розуміє як звичайну відправку форми.

автор: NagarD

Загальний опис

Найкоротший спосіб — передати саму форму в конструктор: new FormData(form). Усі поля з іменами (name) потраплять туди самі, і файли теж.

Далі об'єкт віддається просто в тіло fetch — і браузер сам виставить заголовок Content-Type із правильною межею (boundary) для multipart/form-data.

Саме тому головна порада тут — нічого не виставляти вручну: спроба задати Content-Type самотужки ламає відправку, бо межу браузер згенерує, а в заголовку її не буде.

автор: NagarD

Нотатка

Не задавай Content-Type вручну при відправці FormData. Без межі (boundary) сервер не зможе розібрати тіло, і файл не дійде.

автор: NagarD

Синтаксис

const data = new FormData(formElement);

методи

Метод Опис
append Додає поле, не чіпаючи наявні.
set Задає поле, замінюючи попередні значення.
get Перше значення поля.
getAll Усі значення поля.
has Чи є поле.
delete Видаляє поле.
entries Ітератор пар [ім'я, значення].

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
FormData 7+ 4+ 5+ 12+ 12+ 10+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
FormData 3+ yes yes 5+

Приклади

+ запропонувати свій приклад у пісочниці

Відправка форми з файлом через fetch.

HTML

<form id="form">
    <input name="title" placeholder="Заголовок">
    <input name="photo" type="file">
    <button>Надіслати</button>
</form>

JS

const form = document.getElementById('form');

form.addEventListener('submit', async event => {
    event.preventDefault();

    const data = new FormData(form);

    // можна дописати те, чого немає у формі
    data.append('source', 'web');

    const response = await fetch('/api/upload', {
        method: 'POST',
        // Content-Type НЕ вказуємо: браузер додасть межу сам
        body: data,
    });

    console.log(await response.json());
});
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід