Реализация Action на стороне класса компонента с CSRF-токенами, важная штука с неавторизованными юзерами
Доработки класса компонента:
use Bitrix\Main\Engine\Contract\Controllerable;
...
class ComponentNameComponent extends CBitrixComponent implements Controllerable
...
public function configureActions(): array
{
return [
//Название вашего Action
'ajaxResendSms' => [
//Отключение фильтра
'-prefilters' => [
ActionFilter\Authentication::class, // Для работы AJAX у неавторизованных пользователей
],
],
];
}
public function ajaxResendSmsAction(): array
{
return []; // Можно использовать Exception в случае ошибки
}
В script.js примерно следующее:
BX.ajax.runComponentAction('vendor:example', 'greet', {
mode: 'class', //это означает, что мы хотим вызывать действие из class.php
data: {
person: 'Hero!' //данные будут автоматически замаплены на параметры метода
},
analyticsLabel: {
viewMode: 'grid',
filterState: 'closed'
}
}).then(function (response) {
console.log(response);
/**
{
"status": "success",
"data": "Hi Hero!",
"errors": []
}
**/
}, function (response) {
//сюда будут приходить все ответы, у которых status !== 'success'
console.log(response);
/**
{
"status": "error",
"errors": [...]
}
**/
});
Дополнительные материалы: Поможет ролик: https://www.youtube.com/watch?v=VS80_MvgyWk и статья https://verstaem.com/ajax/new-bitrix-ajax/
По JS
BX.ajax.runComponentAction('vendor:example', 'greet', {
mode: 'class', //это означает, что мы хотим вызывать действие из class.php
data: {
person: 'Hero!' //данные будут автоматически замаплены на параметры метода
},
vendor:example - компонент, где расположен class.php greet - публичный метод, в классе он должен называться с суффиксом Action, то етсь greetAction