Сериализация форм — процесс преобразования данных формы в удобный для передачи или обработки формат, чаще всего в строку, подходящую для отправки через HTTP-запрос. В JavaScript эта задача требует обхода всех элементов формы, извлечения их значений и корректного формирования строки запроса. Zepto предоставляет удобные методы для работы с формами, включая сериализацию.
serialize()Метод serialize() преобразует все элементы формы в
строку вида ключ=значение, готовую для передачи в URL или
через POST-запрос. Он работает аналогично одноимённому методу в jQuery,
но с минимальным весом и высокой скоростью.
var formData = $('form').serialize();
console.log(formData);
Особенности работы:
<input>,
<textarea>, <select>, имеющие
атрибут name.disabled) элементы и элементы
без name.checkbox) и радиокнопок
(radio) учитываются только отмеченные значения.application/x-www-form-urlencoded.Пример формы:
<form id="contactForm">
<input type="text" name="username" value="ivan">
<input type="email" name="email" value="ivan@mail.com">
<input type="checkbox" name="subscribe" checked>
</form>
Сериализация этой формы даст строку:
username=ivan&email=ivan%40mail.com&subscribe=on
serializeArray()Для более детальной работы с данными формы используется метод
serializeArray(). Он возвращает массив объектов, где каждый
объект содержит ключ name и значение value
элемента формы.
var dataArray = $('#contactForm').serializeArray();
console.log(dataArray);
Результат:
[
{ name: "username", value: "ivan" },
{ name: "email", value: "ivan@mail.com" },
{ name: "subscribe", value: "on" }
]
Преимущества serializeArray():
Пример преобразования в JSON:
var jsonData = {};
$.each($('#contactForm').serializeArray(), function() {
jsonData[this.name] = this.value;
});
console.log(jsonData);
Результат:
{
"username": "ivan",
"email": "ivan@mail.com",
"subscribe": "on"
}
<select multiple> или группы чекбоксов с одинаковым
name, serialize() формирует несколько пар
ключ=значение. В массиве serializeArray()
каждое значение представлено отдельным объектом:<select name="colors" multiple>
<option value="red" selected>Красный</option>
<option value="green">Зелёный</option>
<option value="blue" selected>Синий</option>
</select>
$('#myForm').serialize();
// "colors=red&colors=blue"
$('#myForm').serializeArray();
// [ {name: "colors", value: "red"}, {name: "colors", value: "blue"} ]
Скрытые поля Скрытые поля
(<input type="hidden">) автоматически включаются в
сериализацию, что позволяет передавать данные, не видимые
пользователю.
Фильтрация элементов Zepto поддерживает стандартные селекторы, что позволяет сериализовать только часть формы:
$('#myForm input[name="username"]').serialize();
// "username=ivan"
Сериализованные данные удобно использовать в запросах через метод
$.ajax() или его сокращения:
$.ajax({
url: '/submit',
method: 'POST',
data: $('#contactForm').serialize(),
success: function(response) {
console.log('Ответ сервера:', response);
}
});
Преимущества:
application/x-www-form-urlencoded.JSON.stringify() при необходимости
отправки JSON.Иногда требуется сериализация с обработкой специальных форматов,
например, для отправки JSON. Zepto позволяет комбинировать
serializeArray() с JavaScript-функциями:
function serializeFormToJSON(form) {
var json = {};
$.each($(form).serializeArray(), function() {
if (json[this.name]) {
if (!Array.isArray(json[this.name])) {
json[this.name] = [json[this.name]];
}
json[this.name].push(this.value);
} else {
json[this.name] = this.value;
}
});
return json;
}
var jsonData = serializeFormToJSON('#contactForm');
console.log(JSON.stringify(jsonData));
Особенности:
Сериализация часто используется вместе с событиями формы, такими как
submit:
$('#contactForm').on('submit', function(e) {
e.preventDefault();
var data = $(this).serialize();
console.log(data);
});
preventDefault() предотвращает стандартную
отправку формы.<input type="file">) не
сериализуются через serialize() или
serializeArray(). Для передачи файлов используется
FormData.disabled) не
включаются.name не учитываются.Сериализация форм в Zepto обеспечивает минималистичный и эффективный
способ подготовки данных для отправки. Методы serialize() и
serializeArray() позволяют работать как со строкой
URL-запроса, так и с массивом объектов для дальнейшей обработки, включая
формирование JSON и интеграцию с AJAX. Их использование упрощает
взаимодействие с формами, сокращает количество кода и повышает
читаемость приложений.