Middle Компоненты: разработка Рекомендуется

AJAX в компонентах и контроллер компонента

Компонентный AJAX на D7 реализуется через интерфейс Controllerable, методы действий ...Action и вызовы BX.ajax.runComponentAction(). По умолчанию к действиям применяются фильтры CSRF и авторизации, а параметры компонента, необходимые в обработчике, безопасно передаются в подписанном виде через listKeysSignedParameters().

Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.

Что нужно понимать

  • 1
    Подключение AJAX
  • 2
    Обработка AJAX-запросов
  • 3
    Обновление данных без перезагрузки

Материалы

Проверь себя

Действие компонента работает под админом, а у гостя возвращает ошибку. Заказчик уверен, что права не трогали. Где искать?

В префильтрах по умолчанию: каждое действие получает HttpMethod, Authentication и Csrf. Authentication отсекает неавторизованных. Для публичного действия его убирают через минус-prefilters в configureActions() или переопределяют getDefaultPreFilters().

В AJAX-действии $this->arParams['IBLOCK_ID'] пустой, хотя на странице компонент его получил. Почему?

На AJAX-хите ядро не знает параметров со страницы: оно восстанавливает только ключи из listKeysSignedParameters(), присланные в signedParameters. IBLOCK_ID нужно добавить в этот список, а executeComponent() на AJAX-хите вообще не вызывается.

Чем режим class отличается от режима ajax в BX.ajax.runComponentAction()?

В режиме class Router собирает сам компонент из class.php с интерфейсом Controllerable и его подписанными параметрами. В режиме ajax берётся отдельный класс-наследник Controller из файла ajax.php, без параметров и логики компонента.

Почему ajax.php в корне компонента с ручным чтением $_POST и die(json_encode()) стоит переписать?

Такой файл обходит проверку CSRF, авторизацию и единый формат ответа со status и errors, а ошибки в нём отдаются как HTML. Контроллер через Controllerable даёт всё это бесплатно и работает с BX.ajax.runComponentAction() без своей обвязки.

Не сходится?

Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти