Найти тему

Ajax запросы в функции компонента средствами Bitrix

Для того, чтобы иметь удобную возможность делать ajax запросы напрямую в функцию компонента нужны всего две вещи - подготовить компонент и использовать специальную конструкцию вызова на странице.

Создадим в папке компонента дополнительный файл ajax.php, который будет содержать функции, которые могут быть вызваны из вне.

Условимся, что наш компонент называется "math.client".

Сам файл по умолчанию содержит следующий код:

use Bitrix\Main\Engine\Controller;
class CustomAjaxController extends Controller { }

Здесь создается класс, расширяющий базовый класс контроллера ajax-запросов. Этот класс будет содержать функции, доступные для вызовом. Здесь же можно подключать остальные необходимые для корректной работы элементы, библиотеки и т.д.

У функций класс есть одно требование, их имя должно содержать приставку "Action", чтобы контроллер понимал, что наша функция создана для ответа на запросы. Создадим простую функцию, которая будет складывать передаваемые в нее параметры.

public static function calcAction($arg1, $arg2) {
return [
'result' => $arg1 + $arg2
];
}

На этом подготовка компонента завершена, можно делать ajax-запрос со страницы.

BX.ajax.runComponentAction(
'bitrix:math.client',
'calc',
{
mode: 'ajax',
data: {
arg1: 1,
arg2: 2
}
}
).then(function (result)
{
console.log(result);
});

Собственно здесь мы делаем запрос в наш компонент в функцию "calc" (без указания приставки Action) и по итогу получаем результат работы функции компонента. Имена параметров должны совпадать с принимаемыми функцией переменными.

Сам запрос идет в модуль контроллера ajax-запросов, откуда он уже определяется в наш компонент и нашу, запрашиваемую, функцию.

При вам не нужно генерировать принимающий php-файл или компонент с собственной проверкой авторизации, доступами и прочим. А в консоли не будет указано явных путей, куда вы делаете запрос, только его параметры.

На этом канале размещаются решения для конкретных вопросов, возникающих при работе с сайтами на Bitrix или Bitrix24 с использованием D7 и не только.

Сами занимаемся созданием сайтов и внедрением CRM на базах вышеназванных систем. Электронный адрес по всем вопросам - info@msl.ru, либо через форму вопроса на сайте msl.ru