Настройка Ajax-запросов

Featherlight — лёгкая библиотека для реализации модальных окон на JavaScript. Она поддерживает работу с контентом, загружаемым через Ajax, что позволяет динамически отображать информацию без перезагрузки страницы. Встроенные возможности Featherlight делают процесс интеграции Ajax-интерфейсов быстрым и гибким.

Подключение Featherlight для Ajax

Для работы с Ajax-контентом необходимо подключить основной скрипт библиотеки и CSS:

<link href="featherlight.min.css" rel="stylesheet">
<script src="jquery.min.js"></script>
<script src="featherlight.min.js"></script>

Featherlight использует jQuery для работы с Ajax, поэтому важно подключить jQuery перед скриптом Featherlight.

Инициализация модального окна с Ajax

Основная опция для загрузки Ajax-контента — ajax. Она принимает URL или функцию, возвращающую URL. Featherlight автоматически выполнит GET-запрос и подставит результат в тело модального окна:

$.featherlight({
    ajax: 'content.html'
});

Можно также привязать Ajax-загрузку к элементу страницы:

<a href="content.html" data-featherlight="ajax">Открыть окно</a>

В этом случае Featherlight прочитает значение атрибута href и выполнит Ajax-запрос.

Настройка методов запроса и дополнительных параметров

Featherlight позволяет кастомизировать Ajax-запрос, передавая объект ajax с настройками jQuery $.ajax:

$.featherlight({
    ajax: {
        url: 'content.html',
        type: 'POST',
        data: { id: 42 },
        dataType: 'html',
        beforeSend: function(xhr) {
            console.log('Запрос отправляется');
        },
        success: function(data) {
            console.log('Данные получены');
        },
        error: function(xhr, status, error) {
            console.error('Ошибка загрузки: ', status);
        }
    }
});

Ключевые моменты:

  • url — адрес, по которому выполняется запрос.
  • type — HTTP-метод (GET по умолчанию).
  • data — объект с данными, отправляемыми на сервер.
  • dataType — формат ответа (html, json, text).
  • beforeSend — функция, вызываемая до отправки запроса.
  • success и error — обработчики успешного и неуспешного ответа.

Динамическая генерация URL

Иногда адрес для Ajax-запроса необходимо формировать динамически:

$.featherlight({
    ajax: function() {
        return '/getContent?id=' + $(this).data('item-id');
    }
});

В этом случае функция возвращает URL на момент открытия окна, что позволяет подставлять параметры, зависящие от конкретного элемента.

Работа с JSON-данными

Featherlight поддерживает загрузку HTML-контента по умолчанию, но можно обрабатывать JSON-ответы и формировать HTML вручную:

$.featherlight({
    ajax: {
        url: '/api/data',
        dataType: 'json',
        success: function(response) {
            var html = '<h2>' + response.title + '</h2><p>' + response.text + '</p>';
            this.setContent(html);
        }.bind(this)
    }
});

Метод setContent позволяет подставить любые элементы в тело модального окна. Объект this внутри success ссылается на текущий экземпляр Featherlight, что упрощает работу с динамически сформированным контентом.

Настройка индикатора загрузки

Featherlight поддерживает отображение индикатора загрузки во время выполнения Ajax-запроса. По умолчанию это пустой спиннер, но его можно настроить через loading:

$.featherlight({
    ajax: 'content.html',
    loading: '<div class="spinner">Загрузка...</div>'
});

Индикатор автоматически отображается до завершения запроса и скрывается после успешного получения данных.

Отмена и повтор запроса

Featherlight предоставляет возможность отменять текущий Ajax-запрос через событие beforeOpen или beforeClose:

var request = $.ajax({ url: 'content.html' });

$.featherlight({
    ajax: request,
    beforeClose: function() {
        if(request && request.readyState !== 4) {
            request.abort();
        }
    }
});

Это полезно при закрытии модального окна до завершения загрузки, предотвращая лишние обращения к серверу.

Кэширование Ajax-контента

Для оптимизации повторных открытий можно хранить ранее загруженный контент:

$.featherlight({
    ajax: 'content.html',
    afterContent: function() {
        this.$content.data('cached', this.$content.html());
    },
    beforeOpen: function() {
        var cached = this.$content.data('cached');
        if(cached) {
            this.setContent(cached);
            return false; // отменяет повторный запрос
        }
    }
});

Эта техника уменьшает нагрузку на сервер и ускоряет пользовательский интерфейс.

Обработка ошибок и fallback

Важно предусматривать ситуации, когда Ajax-запрос не выполняется:

$.featherlight({
    ajax: {
        url: 'content.html',
        error: function() {
            this.setContent('<p>Не удалось загрузить данные. Попробуйте позже.</p>');
        }.bind(this)
    }
});

Использование метода setContent в обработчике error обеспечивает корректное отображение модального окна даже при сбое.

Поддержка нескольких источников

Featherlight позволяет открывать модальные окна с разными Ajax-источниками, используя единый обработчик:

$('a[data-featherlight="ajax"]').featherlight({
    ajax: function() {
        return $(this).attr('href');
    }
});

Каждый элемент может содержать уникальный URL в href, а библиотека автоматически выполнит запрос и подставит результат в окно.


Featherlight предоставляет мощные средства для работы с динамическим контентом через Ajax. Гибкость настроек, поддержка кастомных обработчиков, индикаторов загрузки и кэширования делает библиотеку удобной для создания современных интерактивных интерфейсов.