Начиная с версии 17.5.10 главного модуля 1С-Битрикс появились встроенные средства для обработки Ajax-запросов непосредственно в компонентах и модулях. Эти инструменты упрощают разработку, делая код более чистым и структурированным.
Обработка Ajax-запросов в компонентах
Способ 1: Класс компонента (class.php)
Этот подход позволяет инкапсулировать всю логику компонента в одном классе, повторно использовать методы и параметры компонента.
Шаги реализации:
Реализуйте интерфейс Controllerable в классе компонента:
class Feedback extends \CBitrixComponent implements \Bitrix\Main\Engine\Contract\ControllerableОпределите метод configureActions() для настройки фильтров запросов:
public function configureActions() { return [ 'sendMessage' => [ 'prefilters' => [], // Сбрасываем фильтры по умолчанию ], ]; }Создайте методы-обработчики с постфиксом
Action:public function sendMessageAction($post) { // Обработка данных return ['status' => 'success']; }Вызовите метод из JavaScript:
BX.ajax.runComponentAction('prominado:feedback', 'sendMessage', { mode: 'class', data: {post: {name: 'Иван', message: 'Тестовое сообщение'}} }) .then(function(response) { if (response.status === 'success') { // Обработка успешного выполнения } });
Способ 2: Отдельный контроллер (ajax.php)
Этот подход создает легковесный обработчик, явно разделяя логику компонента и Ajax-обработчика.
Шаги реализации:
Создайте файл ajax.php в папке компонента
Создайте класс контроллера:
class FeedbackAjaxController extends \Bitrix\Main\Engine\Controller { public function configureActions() { return [ 'sendMessage' => ['prefilters' => []], ]; } public function sendMessageAction($post) { return "Данные получены"; } }Вызовите метод из JavaScript (указав mode: 'ajax'):
BX.ajax.runComponentAction('prominado:feedback', 'sendMessage', { mode: 'ajax', data: {post: {name: 'Иван'}} });
Обработка Ajax-запросов в модулях
Для работы с Ajax в модулях (доступно с версии 18.1.1 для модулей с точкой в названии):
Настройка модуля
Создайте файл .settings.php в корне модуля:
return [ 'controllers' => [ 'value' => [ 'namespaces' => [ '\\Prominado\\Module\\Controller' => 'api', ], ], 'readonly' => true, ], ];Создайте контроллер в папке
/lib/controller/: ```php namespace Prominado\Module\Controller; use Bitrix\Main\Engine\Controller;
class Updater extends Controller { public function applyAction() { $request = $this->getRequest(); return ['response' => 'success']; } }
3. **Вызовите метод из JavaScript**:
```javascript
BX.ajax.runAction('prominado:module.api.updater.apply')
.then(function(response) {
console.log(response);
});
Фильтры и безопасность
Предустановленные фильтры
Битрикс предоставляет набор фильтров для проверки запросов (расположены в /bitrix/modules/main/lib/engine/actionfilter/):
- Authentication - проверка авторизации пользователя
- HttpMethod - проверка HTTP-метода
- Csrf - защита от CSRF-атак
Настройка фильтров
public function configureActions()
{
return [
'sendMessage' => [
'prefilters' => [
new \Bitrix\Main\Engine\ActionFilter\Authentication(),
new \Bitrix\Main\Engine\ActionFilter\HttpMethod([
\Bitrix\Main\Engine\ActionFilter\HttpMethod::METHOD_POST
]),
new \Bitrix\Main\Engine\ActionFilter\Csrf(),
],
],
];
}
Особенности и рекомендации
Важные моменты
При работе с mode: 'class':
- Выполняются методы
onIncludeComponentLang()иonPrepareComponentParams() - Метод
executeComponent()не выполняется
- Выполняются методы
Передача параметров:
- Параметры из JavaScript передаются в аргументы метода с соответствующими именами
- Порядок аргументов в PHP-методе не имеет значения
CSRF-защита:
- По умолчанию включена проверка CSRF-токена
- Для отключения можно сбросить фильтры в
configureActions() - В JavaScript токен доступен как
BX.message('bitrix_sessid')
Обработка ошибок
Для обработки ошибок реализуйте интерфейс Errorable:
class ExampleComponent extends \CBitrixComponent implements
\Bitrix\Main\Engine\Contract\Controllerable,
\Bitrix\Main\Errorable
{
protected $errorCollection;
public function onPrepareComponentParams($arParams)
{
$this->errorCollection = new \Bitrix\Main\ErrorCollection();
return $arParams;
}
public function getErrors()
{
return $this->errorCollection->toArray();
}
}
Заключение
Новые средства работы с Ajax в 1С-Битрикс значительно упрощают разработку, позволяя создавать чистый и структурированный код. Выбор между реализацией в class.php или ajax.php зависит от конкретной задачи: первый подход лучше подходит для тесной интеграции с логикой компонента, второй — для создания легковесных независимых обработчиков.
