ajax запрос в метод компонента

Чтоб не создавать лишних скриптов, битрикс позволяет делать запросы прямо в нужный метод класса компонента.
Покажу на примере пустого компонента:
Создаём /local/components/custom/component/class.php
use Bitrix\Main\Engine\Contract\Controllerable; class CustomComponent extends CBitrixComponent implements Controllerable { public function configureActions() { return [ 'ajaxData' => [], ]; } public function ajaxDataAction() { # тут код обработки ajax запроса $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); if ($request->get('test') === 'Y') { return 'ajax запрос успешно обработан'; } else { throw new \Bitrix\Main\SystemException('Какая-то ошибка'); } } public function executeComponent() { $this->includeComponentTemplate(); } }
В шаблоне компонента, создаём:
/local/components/custom/component/templates/.default/template.php (пустой)
/local/components/custom/component/templates/.default/script.js и добавляем код
BX.ajax.runComponentAction('custom:component', 'ajaxData', { mode: 'class', data: {test: 'Y'} }).then(function (response) { console.log(response); }, function (response) { // status !== 'success' console.error(response); });
Получим аякс запрос на страницу /bitrix/services/main/ajax.php?mode=class&c=custom:component&action=ajaxData и результат, который возвращает метод ajaxDataAction()
Важно. При выполнении аякс запроса, метод executeComponent() не запускается.
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.