@dsx90

Как выбранное значение DropDownList сохранить в базе с помощью Ajax в Yii2?

Как выбранное значение DropDownList сохранить в базе с помощью Ajax в Yii2?

<?= $form->field($model, 'class')->dropDownList(\common\models\TieClass::getAll(), ['prompt' => 'Тип документа:']) ?>


Все это должно работать в экшене Update так что url сделал на него же
<?php
$this->registerJs(<<<JS

$('#launch-class').on('change', function(){
     $.ajax({
         url: '/',
         type: 'POST',
         data : $(this).val(),
         success: function(res){
             console.log(res);
         },
         error: function(){
             alert('Error!');
         }
     });
});
JS
);
?>


Сам экшн
public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if(isset($model->TieClass($model->class)->model)){
            $composit = $model->TieClass($model->class)->model::findOne($id); //Проверьте пути в базе данных
            $render = $model->TieClass($model->class)->form.'_form'; //Проверьте пути в базе данных
        } else {
            $composit = null;
            $render = null;
        }

        if( Yii::$app->request->isAjax){
            if($model->load(Yii::$app->request->post()) && $model->validate()) {
                if($model->save(false)) {
                    return $this->redirect([$render, 'id' => $model->id]);
                }
            }
        } elseif ($model->load(Yii::$app->request->post()) && $composit->load(Yii::$app->request->post())) {
            $isValid = $model->validate();
            $isValid = $composit->validate() && $isValid;
            if ($isValid){
                $model->save(false);
                $composit->save(false);
                return $this->redirect(['view', 'id' => $model->id]);
            }
        } else {
            return $this->render('update', [
                'model' => $model,
                'composit' => $composit
            ]);
        }
    }


Запись значения полученного из Ajax должно попадать в $model->class
  • Вопрос задан
  • 1065 просмотров
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
В options выпадающего списка добавляете этот код:
'onchange' => '
	$.post(
	 "path/to/controller/action",
	 {id : $(this).val()},
	 function(data){
	     // обрабатываете ответ сервера
	 }
)'

В соответствующем контроллере создаёте действие, которое будет обрабатывать ajax запрос и возвращать клиенту ответ.
Это действие может выглядеть вот так:
public function actionList()
    {
         if(Yii::$app->request->isAjax)
         {
             // тут Ваш код
         }
        return json_encode('answer'); // возвращаете ответ
    }
Ответ написан
Ваш ответ на вопрос

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

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