D
D
dsx902017-10-01 15:01:11
Iron
dsx90, 2017-10-01 15:01:11

How to store selected value of DropDownList in database using Ajax in Yii2?

How to store selected value of DropDownList in database using Ajax in Yii2?

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

All this should work in the Update action so the url is made to it
<?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
);
?>

Action itself
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
            ]);
        }
    }

The entry of the value received from Ajax must fall into $model->class

Answer the question

In order to leave comments, you need to log in

2 answer(s)
S
SOTVM, 2019-06-21
@sotvm

No

Дмитрий, 2017-10-01
@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'); // возвращаете ответ
    }

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question