Umbrella JS — это компактная и удобная библиотека для работы с DOM, которая позволяет значительно сократить объём кода по сравнению с чистым JavaScript. Одним из распространённых сценариев является отправка форм без перезагрузки страницы с помощью AJAX. Рассмотрим пошагово, как реализовать этот процесс.
Для начала необходимо получить ссылку на форму и добавить обработчик
события submit. В Umbrella JS выбор элементов
осуществляется с помощью функции u().
u('#myForm').on('submit', function(event) {
event.preventDefault(); // предотвращает стандартную отправку формы
});
Ключевой момент: event.preventDefault()
предотвращает перезагрузку страницы и позволяет полностью контролировать
процесс отправки данных.
Umbrella JS предоставляет удобный метод serialize() для
превращения данных формы в строку, подходящую для передачи через
AJAX.
const formData = u(this).serialize();
Метод serialize() обрабатывает все поля формы
(input, select, textarea) и
формирует строку вида name1=value1&name2=value2.
Если требуется отправлять данные в формате JSON, можно собрать объект вручную:
const formObject = {};
u(this).find('input, select, textarea').each(function() {
formObject[this.name] = this.value;
});
const jsonData = JSON.stringify(formObject);
Umbrella JS не имеет встроенного полноценного AJAX API, но можно
использовать стандартный fetch вместе с методами библиотеки
для удобного доступа к данным.
fetch('/submit', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData
})
.then(response => response.json())
.then(data => {
console.log('Ответ сервера:', data);
})
.catch(error => {
console.error('Ошибка при отправке формы:', error);
});
Для отправки JSON:
fetch('/submit', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: jsonData
})
.then(response => response.json())
.then(data => {
console.log('Ответ сервера:', data);
})
.catch(error => {
console.error('Ошибка при отправке формы:', error);
});
Очень важно обрабатывать ошибки сервера и уведомлять пользователя о
результатах операции. Например, можно динамически выводить сообщения в
блок #formMessage:
.then(data => {
u('#formMessage').text(data.message).addClass('success');
})
.catch(error => {
u('#formMessage').text('Произошла ошибка при отправке формы').addClass('error');
});
Использование классов success и error
позволяет изменять стиль уведомлений через CSS.
Чтобы предотвратить многократные нажатия на кнопку отправки до завершения AJAX-запроса, можно временно её отключать:
const submitButton = u(this).find('button[type="submit"]');
submitButton.attr('disabled', true);
fetch('/submit', { method: 'POST', body: formData })
.finally(() => {
submitButton.removeAttr('disabled');
});
Umbrella JS позволяет легко работать с множественными формами на странице:
u('form.ajaxForm').each(function() {
u(this).on('submit', function(event) {
event.preventDefault();
const data = u(this).serialize();
fetch(this.action, { method: 'POST', body: data });
});
});
Использование метода each() гарантирует, что обработчик
будет назначен на каждую форму отдельно.
Перед отправкой формы рекомендуется проверять поля. Это можно делать
как с помощью стандартного HTML5 (required,
pattern), так и с помощью Jav * aScript:
u('#myForm').on('submit', function(event) {
event.preventDefault();
const email = u(this).find('input[name="email"]').val();
if (!email.includes('@')) {
u('#formMessage').text('Введите корректный email').addClass('error');
return;
}
const data = u(this).serialize();
fetch(this.action, { method: 'POST', body: data });
});
Для больших форм или файлов полезно показывать прогресс отправки. Это
можно сделать с использованием XMLHttpRequest вместо
fetch:
const xhr = new XMLHttpRequest();
xhr.open('POST', this.action);
xhr.upload.onprogr ess = function(event) {
if (event.lengthComputable) {
const percent = (event.loaded / event.total) * 100;
u('#progressBar').css('width', percent + '%');
}
};
xhr.send(new FormData(this));
Umbrella JS, несмотря на компактность, предоставляет удобные инструменты для управления формами: выбор элементов, сериализация данных, работа с событиями. В сочетании с современными AJAX-инструментами можно создавать интерактивные и отзывчивые формы без лишнего кода.