FormData — это встроенный объект в JavaScript,
предназначенный для удобной работы с данными форм. Он позволяет собирать
значения полей формы и отправлять их на сервер через fetch
или XMLHttpRequest без ручного кодирования в URL или JSON.
Библиотека Umbrella JS упрощает взаимодействие с
формами и интеграцию с FormData, предоставляя компактный и читаемый
синтаксис.
В Umbrella JS выбор формы осуществляется через селектор, после чего
можно сразу передать объект формы в FormData:
// Получение формы по идентификатору
var form = u('#myForm')[0]; // u() возвращает массив элементов
var formData = new FormData(form);
Особенности:
u('#myForm')[0] возвращает DOM-элемент формы,
необходимый для конструктора FormData.hidden), будут
автоматически включены в FormData.Помимо автоматического сбора данных из формы, можно добавлять пары ключ-значение вручную:
formData.append('token', '123456');
formData.append('user', u('#username').val());
Важно:
append позволяет добавлять несколько значений под одним
ключом, что полезно для полей с множественным выбором.File,
Blob).Для инспекции или отладки можно перебрать содержимое объекта:
for (var [key, value] of formData.entries()) {
console.log(key, value);
}
formData.entries() возвращает итератор пар
[ключ, значение].get(key),
getAll(key) и has(key) для точечного
доступа.Umbrella JS облегчает отправку форм с использованием
FormData:
u('#myForm').on('submit', function(e) {
e.preventDefault();
var form = this;
var data = new FormData(form);
fetch(form.action, {
method: form.method,
body: data
})
.then(response => response.json())
.then(result => console.log(result))
.catch(error => console.error(error));
});
Особенности подхода:
e.preventDefault() блокирует стандартную отправку
формы.fetch автоматически правильно кодирует
FormData без необходимости вручную устанавливать заголовки
Content-Type.val(), attr(), find().FormData позволяет включать файлы в отправку:
var fileInput = u('#fileInput')[0];
var files = fileInput.files;
for (var i = 0; i < files.length; i++) {
data.append('files[]', files[i]);
}
Ключевые моменты:
files[].fetch и серверными обработчиками,
принимающими multipart/form-data.Можно изменять данные после создания FormData:
// Удаление старого ключа
formData.delete('oldKey');
// Замена значения
formData.set('username', 'newUser');
// Проверка наличия ключа
if (formData.has('token')) {
console.log('Токен присутствует');
}
delete удаляет все значения для ключа.set заменяет существующее значение или создаёт новый
ключ.has удобен для проверки обязательных полей перед
отправкой.Umbrella JS предоставляет удобные методы для получения данных формы и манипуляции элементами:
// Автоматическое добавление полей в FormData
var formData = new FormData();
u('#myForm input, #myForm select').each(function(el) {
formData.append(el.name, u(el).val());
});
each позволяет перебрать все элементы формы и вручную
собрать FormData.FormData легко интегрируется с проверкой данных перед отправкой:
u('#myForm').on('submit', function(e) {
e.preventDefault();
var form = this;
var data = new FormData(form);
if (!data.get('email')) {
alert('Email обязателен');
return;
}
fetch(form.action, { method: form.method, body: data });
});
get или has.addClass, removeClass,
text).fetch) без ручного
кодирования.FormData в связке с Umbrella JS обеспечивает компактное, удобное и мощное решение для работы с формами и отправки данных на сервер в современных веб-приложениях.