#javascript #php #yii2 #pjax
#javascript #php #yii2 #pjax
Вопрос:
Я использую виджет Yii2 Pjax, который не может выдать ошибку от контроллера, из-за чего я не могу регистрировать ошибки для пользователей, когда от контроллера поступает какая-либо ошибка.
Код PJAX
<?php Pjax::begin([
'id' => 'createBucketPjax',
'timeout' => 4000,
'formSelector' => '#createBucketForm',
'enablePushState' => false,
'clientOptions' => [
'skipOuterContainers' => true,
'error' => new JsExpression("function(event) {
alert('Anything');
}"),
]
]); ?>
Код КОНТРОЛЛЕРА:
if(!$fieldModel->save()){
$transaction->rollBack();
//Here I want to send error
$error = $fieldModel->getErrorsString();
return [
'success' => false,'error' => $error
];
}else{
return $this->renderAjax('create', [
'model' => $model
]);
}
Я пробовал приведенные ниже варианты клиентов, но не работает
'error' => new JsExpression("function(event) {
alert('Please work');
}"),
Также использовался javascript, но никакой помощи :-
$(document).on('pjax:error', function(event) {
console.log(event);
})
Есть ли какой-либо способ, с помощью которого я могу отправить 404 с контроллера в yii2? Это действительно может решить мою проблему
Комментарии:
1. Ваш запрос на самом деле является ответом HTTP 200, поэтому ошибка не вызвана
pjax:error
2. это то, чего я хочу достичь, даже если я создаю исключение, а HTTP отправляет 200 @ustmaestro
3. Как писал @Dexen, pjax работает с полной заменой содержимого, а не с ответами json
Ответ №1:
Из документов Yii2 Pjax.
В ответ на запрос AJAX, Pjax отправит клиенту обновленное содержимое тела (на основе запроса AJAX), которое заменит старое содержимое на новое. Затем URL-адрес браузера будет обновлен с помощью pushState. Весь процесс не требует перезагрузки макета или ресурсов (js, css)
Вы должны иметь дело с полным содержимым формы, а не с json.
Итак, ваш код должен выглядеть следующим образом (всегда возвращайте форму html обратно):
if(!$model->save()){
$transaction->rollBack();
}
return $this->renderAjax('create', [
'model' => $model
]);
Комментарии:
1. Спасибо за разъяснение @Dexen действительно ценю.
2. На самом деле, когда я открываю модальный с помощью PJAX, то при возникновении любой ошибки он выводит HTML за пределы модального.