@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; ?>
  • Вопрос задан
  • 597 просмотров
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы