133  /  380
Справочник

Практика. Взаимодействие с контроллерами из Javascript

Просмотров: 36200
Дата последнего изменения: 04.05.2022
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
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(), в нём будет массив распакованных данных.

Дополнительно

38
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии