Небольшие дополнения к этой статье.
1. Сгенерировать ошибку внутри метода action можно php исключением , например throw new Exception('Деление на ноль.'); Других вариантов я не нашел. Если они есть подскажите!
2. При использовании csrf - нужно id сессии передавать в параметре с именем sessid
3. При обращении к модулю(vendor.module) нужно точку заменить не на нижнее подчеркивание, а на :
3. Передача параметров компонента. В видео это есть , в статье ничего не написали.
С начало нужно описать какие параметры нужно подписать и передавать в ajax запросах. Описываются они в методе listKeysSignedParameters при реализации интерфейса Bitrix\Main\Engine\Contract\Controllerable
protected function listKeysSignedParameters() { return [ 'IBLOCK_ID', 'ACTIVE_SECTION_ID' ]; } |
При запросе в параметр с именем signedParameters нужно передать значение сгенерированное $this->getComponent()->getSignedParameters()
Я пишу на jquery и в мох модулях использую такую конструкцию
//Инициализация модуля в шаблоне компонента new myModule({ csrf: '<?=bitrix_sessid()?>', signedParameters: '<?=$this->getComponent()->getSignedParameters()?>' }); |
Во всех своих модулях использую вот такой метод для отправки запросов
myModule.prototype.send = function (action, params, callback) { params.signedParameters = this.options.signedParameters; params.sessid = this.options.csrf; params.action= action; var data = new FormData(); $.each(params, function (i, v) { data.append( i, v); }); $.ajax({ url: this.options.ajax, type: 'POST', data: data, success: callback, processData: false, contentType: false, error: function (jqXHR, textStatus, errorThrown) { $.error('ОШИБКИ AJAX запроса: ' + textStatus ); } }); } //Использование send myModule.prototype.foo = function() { this.send('getMyData', {param1: 1, param2: 2}, function(response){ // работаю с ответом }); } |