Zepto.js — это лёгкая библиотека для работы с DOM и AJAX,
предоставляющая удобный интерфейс для выполнения HTTP-запросов и
управления их параметрами. Основной механизм работы с AJAX в Zepto
основан на функции $.ajax(), которая позволяет гибко
конфигурировать запросы, управлять заголовками, данными и обработкой
ответов.
$.ajax()Функция $.ajax() принимает объект конфигурации с
множеством опций:
$.ajax({
url: '/api/data',
type: 'GET',
dataType: 'json',
data: { id: 123 },
headers: { 'Authorization': 'Bearer token' },
timeout: 5000,
success: function(response) { console.log(response); },
error: function(xhr, status, error) { console.error(error); }
});
Ключевые параметры:
url — адрес, на который отправляется
запрос. Может быть абсолютным или относительным.type — HTTP-метод: GET,
POST, PUT, DELETE. По умолчанию
GET.data — данные, отправляемые на сервер.
Для GET они будут сериализованы в строку запроса, для
POST — отправлены в теле запроса.dataType — ожидаемый формат ответа:
json, text, html,
xml, script. Позволяет Zepto автоматически
обрабатывать ответ.headers — объект с дополнительными
HTTP-заголовками.timeout — максимальное время ожидания
ответа в миллисекундах.success и
error — функции обратного вызова для
обработки успешного и неуспешного ответа соответственно.Zepto автоматически сериализует объекты data для
GET и POST запросов. Например:
$.ajax({
url: '/api/search',
type: 'GET',
data: { query: 'zepto', page: 2 }
});
Этот запрос преобразуется в URL вида
/api/search?query=zepto&page=2. Для сложных структур
данных можно использовать JSON:
$.ajax({
url: '/api/save',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ name: 'John', age: 30 })
});
Важно: установка contentType в
application/json требует явного преобразования объекта в
строку JSON.
Настройка заголовков осуществляется через параметр
headers:
$.ajax({
url: '/api/user',
headers: {
'Authorization': 'Bearer token',
'X-Custom-Header': 'value'
}
});
Zepto позволяет переопределять стандартные заголовки и добавлять собственные, что особенно важно при работе с API, требующими аутентификацию или специфические метаданные.
Параметр timeout задаёт максимальное время ожидания
ответа:
$.ajax({
url: '/api/data',
timeout: 3000,
error: function(xhr, status, error) {
if (status === 'timeout') {
console.error('Превышено время ожидания запроса');
} else {
console.error(error);
}
}
});
В error функция получает три аргумента:
xhr — объект XMLHttpRequest.status — строковое значение статуса
(timeout, error, abort и
т.д.).error — текст ошибки или объект
исключения.По умолчанию все запросы в Zepto асинхронные
(async: true). Можно явно задать синхронный режим:
$.ajax({
url: '/api/data',
async: false
});
Использование синхронных запросов не рекомендуется, так как они блокируют выполнение скрипта и интерфейс страницы.
Zepto автоматически преобразует ответ сервера в зависимости от
dataType. Дополнительно можно использовать функцию
beforeSend для предварительной настройки запроса:
$.ajax({
url: '/api/data',
beforeSend: function(xhr) {
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
}
});
beforeSend вызывается перед отправкой запроса и
позволяет динамически изменять заголовки или другие параметры.
Zepto предоставляет вспомогательные функции для основных методов HTTP:
$.get(url, data, success, dataType) — GET-запрос.$.post(url, data, success, dataType) —
POST-запрос.$.getJSON(url, data, success) — GET-запрос с
автоматическим разбором JSON.Примеры:
$.get('/api/items', { category: 'books' }, function(data) {
console.log(data);
}, 'json');
$.post('/api/save', { name: 'Alice' }, function(response) {
console.log(response);
});
Эти методы позволяют быстро создавать простые запросы без необходимости указывать полный объект конфигурации.
then и failZepto поддерживает промисы через методы then,
fail и always:
$.ajax({ url: '/api/data' })
.then(function(response) {
console.log('Успешно', response);
})
.fail(function(xhr, status, error) {
console.error('Ошибка', status, error);
})
.always(function() {
console.log('Запрос завершён');
});
Такой подход упрощает управление асинхронными операциями и объединение нескольких запросов в цепочку.
Для загрузки файлов используется объект FormData:
var formData = new FormData();
formData.append('file', fileInput.files[0]);
$.ajax({
url: '/api/upload',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(response) { console.log(response); }
});
Ключевые моменты:
processData: false предотвращает автоматическую
сериализацию объекта FormData.contentType: false позволяет браузеру установить
корректный заголовок multipart/form-data.Zepto позволяет задавать глобальные настройки для всех AJAX-запросов
через $.ajaxSetup():
$.ajaxSetup({
timeout: 5000,
headers: { 'X-Global-Header': 'value' }
});
Эти параметры будут автоматически применяться ко всем последующим
вызовам $.ajax().
Этот подход к настройке параметров запроса в Zepto обеспечивает гибкость и точный контроль над отправкой данных, обработкой ответов и управлением ошибками. Он позволяет интегрировать AJAX-запросы в сложные интерфейсы с минимальной нагрузкой на код и высокой читаемостью.