Umbrella JS — легковесная библиотека для работы с DOM и AJAX в JavaScript. Одной из возможностей, которую она предоставляет, является работа с AJAX-запросами и их отмена. Управление асинхронными операциями важно для оптимизации производительности и предотвращения лишней нагрузки на сервер.
Для выполнения AJAX-запроса используется метод u.ajax().
Он поддерживает все стандартные параметры: URL, метод, данные, тип
ответа. Пример простого запроса:
let request = u.ajax({
url: '/api/data',
method: 'GET',
success: function(response) {
console.log('Данные получены:', response);
},
error: function(err) {
console.error('Ошибка запроса:', err);
}
});
Возвращаемый объект request позволяет
отслеживать состояние запроса и при необходимости его
отменять.
Umbrella JS предоставляет метод abort() для объектов,
созданных через u.ajax(). Вызов этого метода прекращает
текущую асинхронную операцию и предотвращает вызов обработчиков
success и error.
Пример отмены запроса:
let request = u.ajax({
url: '/api/data',
method: 'GET',
success: function(response) {
console.log('Данные получены:', response);
},
error: function(err) {
console.error('Ошибка запроса:', err);
}
});
// Отмена запроса через 100 миллисекунд
setTimeout(function() {
request.abort();
console.log('Запрос был отменен');
}, 100);
Важно: abort() безопасно вызывать в
любое время. Если запрос уже завершился, метод не вызывает ошибок,
просто ничего не делает.
Для работы с несколькими параллельными запросами удобно сохранять их объекты в массиве. Это позволяет массово прерывать все операции:
let requests = [];
requests.push(u.ajax({ url: '/api/data1', method: 'GET' }));
requests.push(u.ajax({ url: '/api/data2', method: 'GET' }));
// Отмена всех запросов
requests.forEach(function(req) {
req.abort();
});
Такой подход полезен при динамических интерфейсах, где пользователь может быстро менять контент, и старые запросы становятся ненужными.
input запускает AJAX-запрос.
Старые запросы, которые еще не завершились, можно отменять через
abort(), чтобы не загружать сервер лишними операциями.let activeRequest;
u('#search').on('input', function(e) {
if (activeRequest) activeRequest.abort();
activeRequest = u.ajax({
url: `/api/search?q=${e.target.value}`,
method: 'GET',
success: function(results) {
console.log('Результаты поиска:', results);
}
});
});
Динамическая загрузка контента Если пользователь быстро переключается между вкладками, старые AJAX-запросы, относящиеся к предыдущей вкладке, можно прерывать для экономии ресурсов.
Фильтры и сортировка При изменении фильтров на странице часто запускаются новые запросы. Отмена предыдущих позволяет отображать только актуальные данные.
u.ajax() возвращает объект, совместимый с промисами, что
позволяет использовать .then() и .catch(). В
случае отмены запроса, промис не будет выполнен:
let request = u.ajax({
url: '/api/data'
}).then(function(response) {
console.log('Данные:', response);
}).catch(function(err) {
console.log('Запрос прерван или произошла ошибка:', err);
});
// Отмена запроса
request.abort();
Это делает API универсальным для современных подходов с асинхронным кодом.
input и scroll, чтобы минимизировать
количество AJAX-вызовов.Umbrella JS использует XMLHttpRequest под капотом,
что обеспечивает полную поддержку метода abort(). При
отмене запроса:
success не вызываются.error могут быть вызваны с указанием
статуса abort, если нужно отследить отмену.abort.abort() с флагами, чтобы
управлять отображением UI (например, индикатора загрузки).Управление отменой AJAX-запросов в Umbrella JS позволяет создавать быстрые, отзывчивые и оптимизированные интерфейсы, снижая лишнюю нагрузку и предотвращая неконсистентное поведение данных на странице.