@dsx90

Как передать ajax по выбранному значению в DropDownList и получить ответ?

У меня есть товар в нем я могу выбрать категорию в DropDownList а у каждой категории есть спецификации которые должны вернуться в этот товар без перезагрузки страницы. Есть мысль это сделать через Ajax но как написать правильно скрипт не много не понимаю. Сильно не ругайте я в этом деле новичок.
<?= $form->field($model, 'category_id')->dropDownList(ArrayHelper::map(
       $categories,
       'id',
       title'
 ), ['prompt' => '']) ?>

<?php if (isset($model->category)) : ?>
                    <?= $form->field($model, 'options')->widget(MultipleInput::className(), [
                        'max' => isset($model->category->option) ? count($model->category->option) : null,
                        'enableGuessTitle'  => false,
                        'allowEmptyList' => true,
                        'addButtonPosition' => MultipleInput::POS_HEADER, // show add button in the header
                        'columns' => [
                 [
                       'name' => 'options',
                       'items' => isset($model->category->option) ? $model->category->option : null,
                       'type'  => 'dropDownList',
                       'title' => 'Опция',
                        'options' => [
                             'class' => 'js-select'
                        ]
                ],
                [
                        'name' => 'value',
                        'title' => 'Значение',
                        'items'  => $model->value,
                ],
                [
                       'name' => 'scale',
                      'items'  => isset($model->category->scale) ? $model->category->scale : 'Выберете категорию',
                      'title' => 'Измерение',
                      'type'  => 'dropDownList',
               ],
         ],
    ])->label(false);
?>
<?php endif; ?>
  • Вопрос задан
  • 611 просмотров
Пригласить эксперта
Ответы на вопрос 2
Lumore
@Lumore
Front-end developer
Есть готовый плагин для Yii2: DepDrop
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
При изменении выпадающего списка ajax можно отправить так:
<?= $form->field($model, 'country_id')->dropDownList(ArrayHelper::map(Countries::getAllName(), 'id', 'name_ru'),
                                                         [
                                                             'prompt' => 'Выбрать страну...',
                                                             'onchange' => '
                                                                $.post(
                                                                 "'.Url::toRoute('ajax/list').'",
                                                                 {id : $(this).val()},
                                                                 function(data){
                                                                     $("select#regions").html(data).attr("disabled", false)
                                                                 }
                                                                )
                                                             '
                                                         ]);
//это взаимосвязанный выпадающий список, куда будет подставлен результат работы ajajx
   <?= $form->field($model, 'region_id')->dropDownList(ArrayHelper::map(Regions::getAllName(), 'id', 'name_ru'),
                                                        [
                                                            'prompt' => 'Выбрать регион...',
                                                            'id' => 'regions',
                                                            'disabled' => $model->isNewRecord ? 'disabled' : false
                                                        ])


Действие в контролере, в котором обрабатывается ajax

public function actionList()
    {
         if(Yii::$app->request->isAjax)
         {
             $id = (int)Yii::$app->request->post('id');

             $regions = Regions::find()
                                 ->where('status=:status',[':status' => Regions::STATUS_ACTIVE])
                                 ->andWhere('country_id=:id', [':id' => $id])
                                 ->orderBy('name_ru')
                                 ->all();

             foreach($regions as $region){
                 $this->option .= '<option value="'.$region->id.'">'.$region->name_ru.'</option>';
             }
         }
        return $this->option;
    }


Работает без всяких сторонних плагинов. Поменяйте параметры на свои и пользуйтесь на здоровье.

p.s. При оформлении вопроса, когда пишите код, пользуйтесь специальными тегами для оформления кода.

c2ed420cf9774e1487163d5752513f8a.png
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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