Активно начал использовать новый ajax описанный в этой статье
Небольшие дополнения к этой статье.
1. Сгенерировать ошибку внутри метода action можно php исключением , например throw new Exception('Деление на ноль.'); Других вариантов я не нашел. Если они есть подскажите!
2. При использовании csrf - нужно id сессии передавать в параметре с именем sessid
3. При обращении к модулю(vendor.module) нужно точку заменить не на нижнее подчеркивание, а на :
3. Передача параметров компонента. В видео это есть , в статье ничего не написали.
С начало нужно описать какие параметры нужно подписать и передавать в ajax запросах. Описываются они в методе listKeysSignedParameters при реализации интерфейса Bitrix\Main\Engine\Contract\Controllerable
При запросе в параметр с именем signedParameters нужно передать значение сгенерированное $this->getComponent()->getSignedParameters()
Я пишу на jquery и в мох модулях использую такую конструкцию
Во всех своих модулях использую вот такой метод для отправки запросов
Небольшие дополнения к этой статье.
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){
// работаю с ответом
});
}
|