Unpoly — это JavaScript-библиотека, ориентированная на улучшение
пользовательского интерфейса без необходимости полной перезагрузки
страниц. Центральная концепция заключается в том, чтобы заменять только
определённые части DOM на основе AJAX-запросов, сохраняя состояние
страницы и минимизируя перезагрузки. Основной объект библиотеки —
up, через который выполняются все действия, связанные с
запросами и обновлением интерфейса.
Запросы в Unpoly можно инициировать несколькими способами:
up-target,
up-method, up-transition), которые задают
поведение ссылок и форм;up.visit(url, options) для перехода или
up.submit(form, options) для отправки форм.Ключевым моментом является сопоставление запроса с целевым
контейнером, куда будет вставлен новый HTML. Контейнер
определяется через CSS-селектор в атрибуте up-target или
через опцию target в JavaScript.
Unpoly поддерживает стандартные методы HTTP: GET,
POST, PUT, PATCH,
DELETE. Метод можно указать явно через атрибут
up-method или через объект options.method при
вызове API.
Пример использования Jav * aScript:
up.visit('/users/42', {
method: 'GET',
target: '#user-profile',
transition: 'fade'
});
Запрос GET подгружает HTML с сервера и плавно заменяет
содержимое контейнера #user-profile с применением перехода
fade.
Ответ сервера в Unpoly может быть как чистым HTML, так и JSON, если требуется дополнительная логика. Основная задача библиотеки — определить, какие части DOM нужно обновить.
up.on('up:content-updated', callback).Пример:
up.on('up:content-updated', (event) => {
console.log('Контент обновлён в контейнере:', event.target);
});
event.target указывает контейнер, в который был вставлен
новый HTML.
Каждое посещение или отправка формы сопровождается набором заголовков HTTP. Unpoly добавляет стандартные заголовки:
X-Up-Target — идентификатор целевого контейнера;X-Up-Fragment — если обновляется только фрагмент
страницы;X-Requested-With: XMLHttpRequest — позволяет серверу
определять AJAX-запрос.Дополнительно можно добавить пользовательские заголовки через опцию
headers:
up.visit('/settings', {
headers: { 'X-CSRF-Token': 'token_value' }
});
Параметры запроса можно передавать через data, что
позволяет динамически добавлять GET или POST-параметры.
Unpoly автоматически управляет историей браузера, интегрируясь с
pushState. Каждое обновление контейнера может создавать
запись в истории, если используется переход. Для полного контроля над
историей можно использовать опцию history: false:
up.visit('/notifications', { history: false });
Также поддерживается кэширование запросов. Уникальные URL и параметры позволяют Unpoly хранить результат и использовать его повторно без нового запроса.
Unpoly предоставляет широкую систему событий, позволяющую отслеживать жизненный цикл запроса:
up:request-start — запрос отправлен;up:request-success — успешный ответ получен;up:request-error — ошибка запроса;up:request-end — завершение запроса, независимо от
результата.Пример подписки:
up.on('up:request-error', (event) => {
alert(`Ошибка запроса: ${event.xhr.status}`);
});
События полезны для логирования, показа индикаторов загрузки или обработки ошибок без перезагрузки страницы.
Целевой контейнер — ключевой элемент при работе с Unpoly. Можно
указывать несколько контейнеров, передавая массив селекторов, или
динамически определять контейнер через коллбэки target:
up.visit('/messages', {
target: () => document.querySelector('#chat-window')
});
Unpoly умеет делать частичное обновление DOM, оставляя скрипты, слушатели и состояния интерактивных элементов нетронутыми, что делает библиотеку особенно удобной для сложных SPA-подобных интерфейсов.
Для форм доступен метод up.submit(form, options),
который автоматически сериализует данные и отправляет их на сервер.
Важные возможности:
enctype="multipart/form-data";submit;Пример:
const form = document.querySelector('#edit-profile');
up.submit(form, {
target: '#profile-container',
transition: 'slide'
});
Переходы (transitions) — это визуальные эффекты замены контента.
Unpoly поддерживает встроенные переходы (fade,
slide, cross-fade) и позволяет создавать
кастомные через CSS. Переход задаётся через up-transition
или опцию transition в JavaScript.
up.visit('/dashboard', { transition: 'cross-fade' });
Важный момент: transitions применяются только к контейнеру, не затрагивая остальную страницу. Это снижает нагрузку на браузер и сохраняет интерактивность элементов.
Эти механизмы делают Unpoly мощным инструментом для создания динамических веб-приложений без полной перезагрузки страниц, с точным контролем запросов, обновлений и визуальных эффектов.