AJAX в компонентах и контроллер компонента
Компонентный AJAX на D7 реализуется через интерфейс Controllerable, методы действий ...Action и вызовы BX.ajax.runComponentAction(). По умолчанию к действиям применяются фильтры CSRF и авторизации, а параметры компонента, необходимые в обработчике, безопасно передаются в подписанном виде через listKeysSignedParameters().
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Подключение AJAX
-
2
Обработка AJAX-запросов
-
3
Обновление данных без перезагрузки
Материалы
Официальная документация
Материалы BXMax
Проверь себя
Действие компонента работает под админом, а у гостя возвращает ошибку. Заказчик уверен, что права не трогали. Где искать?
В префильтрах по умолчанию: каждое действие получает 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: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить