@walder

Как исправить ошибку в ajax запросе?

Всем привет.
Есть ActiveForm в которой radio в модальном окне, но проблема в том что значения не сохраняются в базу, показывает alert('fail');
<?php $form = ActiveForm::begin([
    'id' => 'formTest',
    'type' => ActiveForm::TYPE_HORIZONTAL,
    'formConfig' => ['labelSpan' => 3, 'deviceSize' => ActiveForm::SIZE_SMALL]
]);

$list = [0 => 'one', 1 => 'two', 2 => 'three'];
?>

<?= $form->field($model, 'name')->radioList($list)->label(false); ?>
<div class="form-group">
    <?= \yii\helpers\Html::submitButton('<i class="glyphicon glyphicon-ok"></i> Ok', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>


js
$js = <<< JS

$(document).ready(function() {
    
    $('form#formTest').on('beforeSubmit', function () {
        var data = $(this).serialize();
        $.ajax({
            type: 'post',
            url: 'message',
            data: data,
            
            error: function() {
                console.log('error');
            },
            
            success: function(){
                console.log(data);
            },
        })
        .done(function(data) {
           if(data.success) {
              alert('success');
           } else {
              alert('fail');
           }
        });

        return false;
    });
});

JS;


Controller
public function actionMessage()
{
    $model = new Post();

    if(\Yii::$app->request->isAjax) {
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->save();
        }
    }

    return $this->renderAjax('message', [
        'model'=>$model,
    ]);
}
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Kulay
Вероятно, это условие в вашем коде никогда не выполняется if(data.success), так как вы не возвращаете из контроллера ничего, кроме формы. Вам нужно при успешном сохранении модели возвращать положительный ответ
Ответ написан
Комментировать
@walder Автор вопроса
Немного переделал, теперь работает, но кнопка по сути не нужна, при переключении радиобоксов сразу сохраняется значение в базу. Как сделать чтобы сохранялось после нажатия на сабмит? Что исправить?
Теперь работает без js.

View
<?php $form = ActiveForm::begin([
    'id' => 'formTest',
    'method' => 'POST',
    'enableAjaxValidation' => true,
    'type' => ActiveForm::TYPE_HORIZONTAL,
    'formConfig' => [
        'showErrors' => true,
        'labelSpan' => 1,
        'deviceSize' => ActiveForm::SIZE_SMALL,
    ]
]);
?>

<?= $form->field($model, 'Name')->radioList($list)->label(false); ?>

<?php ActiveForm::end(); ?>

Controller
public function actionMessage($id)
{
    $model = Orders::findOne($id);

    if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {

        if ($model->save()) {
            return $this->renderAjax('message', [
                'model'=>$model,
            ]);
        } else {
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($model);
        }
    }

    return $this->renderAjax('message', [
        'model'=>$model,
    ]);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы