Блог Горошко Андрея 1C-Битрикс Основы JavaScript в Битрикс: Объект BX, BX.ready, BX.bind и AJAX

Основы JavaScript в Битрикс: Объект BX, BX.ready, BX.bind и AJAX

Средний рейтинг
Еще нет оценок

Битрикс имеет собственное легковесное ядро JavaScript, которое предоставляет унифицированный API для решения большинства frontend-задач.

Оно избавляет от необходимости подключать тяжелые библиотеки вроде jQuery для простых операций и обеспечивает совместимость со всеми внутренними механизмами платформы.

Все функции ядра доступны через глобальный объект BX.

1. Выполнение кода после загрузки DOM: BX.ready()

Это аналог DOMContentLoaded или $(document).ready() в jQuery. Код, обернутый в BX.ready, выполнится только после того, как вся структура HTML-страницы будет загружена и готова к манипуляциям.

Синтаксис:

BX.ready(function() {
    // Ваш JS-код здесь
    console.log('DOM готов, можно работать!');
});

Использование BX.ready — обязательное правило для всего вашего JS-кода в шаблонах, чтобы избежать ошибок, когда скрипт пытается найти еще не существующий на странице элемент.

2. Навешивание событий: BX.bind()

Это кросс-браузерный способ добавить обработчик события к элементу. Аналог element.addEventListener().

Синтаксис: BX.bind(element, eventName, handler)

BX.ready(function() {
    // Находим кнопку по ID
    var myButton = BX('my-button-id'); // BX('id') - короткий аналог document.getElementById('id')

    if (myButton) {
        // Вешаем обработчик на событие 'click'
        BX.bind(myButton, 'click', function() {
            alert('Кнопка была нажата!');
        });
    }
});

3. Манипуляции с DOM и CSS-классами

Ядро предоставляет простые функции для работы с элементами и их классами.

BX.ready(function() {
    var myBlock = BX('my-block');

    if (myBlock) {
        // Добавить класс
        BX.addClass(myBlock, 'highlight');

        // Удалить класс
        BX.removeClass(myBlock, 'hidden');

        // Проверить наличие класса
        if (BX.hasClass(myBlock, 'active')) {
            console.log('Блок активен');
        }

        // Переключить класс (если есть - удалит, если нет - добавит)
        BX.toggleClass(myBlock, 'toggled-state');
    }
});
  • BX.findChild(container, params, recursive): мощная функция для поиска дочерних элементов по тегу, классу и т.д.

4. AJAX-запросы: BX.ajax() и BX.ajax.runAction()

Для асинхронных запросов к серверу в Битрикс есть два основных способа.

BX.ajax(params) — классический способ

Похож на $.ajax в jQuery. Используется для запросов к произвольным скриптам.

BX.ajax({
    url: '/ajax/my_handler.php',
    method: 'POST',
    data: {
        action: 'get_data',
        itemId: 123
    },
    dataType: 'json',
    onsuccess: function(response) {
        console.log('Ответ от сервера:', response);
    },
    onfailure: function(error) {
        console.error('Произошла ошибка:', error);
    }
});

BX.ajax.runAction(action, config) — современный D7-способ

Это предпочтительный метод для работы с контроллерами D7. Он удобнее и безопаснее.

// Запрос к действию 'my:module.user.like'
BX.ajax.runAction('my:module.user.like', {
    // Передаем данные
    data: {
        likedUserId: 45
    }
}).then(
    // Успешный ответ (response.status === 'success')
    function(response) {
        if (response.data.liked) {
            console.log('Лайк успешно поставлен!');
        }
    },
    // Ответ с ошибкой (response.status === 'error')
    function(response) {
        console.error('Ошибка:', response.errors[0].message);
    }
);

Преимущества runAction:

  • Работает с современными контроллерами D7.
  • Использует Promises, что делает код более читаемым.
  • Автоматически добавляет sessid для CSRF-защиты.
  • Стандартизированный формат ответа {status, data, errors}.

Вывод:
Ядро BX JS предоставляет все необходимые инструменты для frontend-разработки на Битрикс. Всегда оборачивайте свой код в BX.ready. Используйте BX.bind для событий и BX.addClass/removeClass для стилизации. Для AJAX-запросов к современным компонентам и модулям на D7 ваш выбор — BX.ajax.runAction.

Bitrix JavaScript, BX, BX.ready, BX.bind, BX.ajax, BX.addClass, BX.removeClass, JS Битрикс, frontend.

Мой рейтинг:

Добавить комментарий

Related Post

Сложные фильтры в D7 ORM: Query::filter() для логики И/ИЛИ и вложенных условийСложные фильтры в D7 ORM: Query::filter() для логики И/ИЛИ и вложенных условий

Средний рейтинг Еще нет оценок Простой массив в параметре filter метода getList() отлично подходит для условий, объединенных по логике «И» (AND). Но что делать, если нужна более сложная логика, например, (A AND B) OR C?

Работа с Highload-блоками в Битрикс через D7 ORM: Пошаговое руководствоРабота с Highload-блоками в Битрикс через D7 ORM: Пошаговое руководство

Средний рейтинг Еще нет оценок Highload-блоки (HL-блоки) — это мощный инструмент 1С-Битрикс для хранения произвольных структурированных данных, не являющихся контентом в классическом понимании (как, например, новости или товары). Это могут

Локализация в Битрикс: Правильная работа с языковыми файлами (GetMessage и Loc::getMessage)Локализация в Битрикс: Правильная работа с языковыми файлами (GetMessage и Loc::getMessage)

Средний рейтинг Еще нет оценок Жестко «зашивать» текстовые строки (заголовки, названия кнопок, сообщения) прямо в код — плохая практика. Это затрудняет перевод сайта на другие языки и усложняет поддержку. В