Просмотров: 47251
Дата последнего изменения: 04.05.2022
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
4
5
Недоступно в лицензиях:
Ограничений нет
Как в AJAX-действии использовать параметры компонента?
Часто бывает, что необходимо в аякс-запросе получить у компонента те же параметры, которые были при его отображении на странице.
- Нужно описать те параметры, которые нужно использовать в методе listKeysSignedParameters
class ExampleComponent extends \CBitrixComponent implements \Bitrix\Main\Engine\Contract\Controllerable
{
protected function listKeysSignedParameters()
{
//перечисляем те имена параметров, которые нужно использовать в аякс-действиях
return [
'STORAGE_ID',
'PATH_TO_SOME_ENTITY',
];
}
- Получить подписанные параметры в шаблоне и, например, передать в ваш js класс компонента
<!--template.php-->
<script type="text/javascript">
new BX.ExampleComponent({
signedParameters: '<?= $this->getComponent()->getSignedParameters() ?>',
componentName: '<?= $this->getComponent()->getName() ?>'
});
</script>
- Вызывать BX.ajax.runComponentAction (как в примерах) c параметром signedParameters.
BX.ajax.runComponentAction(this.componentName, action, {
mode: 'class',
signedParameters: this.signedParameters, //вот способ для передачи параметров компоненту.
data: data
}).then(function (response) {
//some work
});
В итоге в вашем аякс-действии можно использовать параметры STORAGE_ID, PATH_TO_SOME_ENTITY. При этом параметры подписаны и целостность контролируется ядром.
Если необходимо работать с подписанными параметрам внутри ajax.php, то используйте внутри действия контроллера метод Controller::getUnsignedParameters(), в нём будет массив распакованных данных.
Дополнительно