Yii2 зависимые select в чем ошибка?

Делаю зависимые селекты. В первом показывает марки во втором модели в зависимости от выбранной марки.

Вот в виде код.
<?php $form = ActiveForm::begin(['options' => ['class' => 'col_16 user_card_wrapper']]);?>
              <?= $form->field($model, 'car_mark')->dropDownList(
                  ArrayHelper::map(MarkCar::find()->all(), 'id', 'mark'),
                  [
                      'prompt' => 'Select',
                      'onchange' => '
                        $.post( "/ajax/Ajax?id='.'"+$(this).val(), function(data){
                          $("#searchform-car_model").html(data);
                        } );
                        '
                  ]);
              ?>
              <?= $form->field($model, 'car_model')->dropDownList(
                  ['prompt' => 'Select',]);
              ?>
              <?php ActiveForm::end();?>


Вот сама функция ajax
public function actionAjax($id){
        echo 'asdasdasdas';
        $count_model = ModelCar::find()
            ->where(['id_mark' => $id])
            ->count();
        $car_model = ModelCar::find()
            ->where(['id_mark' => $id])
            ->all();
        echo "<option value = ''>Select</option>";
        if($count_model > 0){
            foreach ($car_model as $key){
                echo "<option value='".$key->id."'>".$key->model."</option>";
            }
        }
        else{
            echo "<option></option>";
        }
    }


Делаю все по своему старому рабочему примеру, но тут на отказ отказывается работать. Самое интересное что возвращает мне полную копию страницы. Сам ajax срабатывает.
  • Вопрос задан
  • 819 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
А зачем $.post? Не проще ли:
$( "#searchform-car_model" ).load("' . Yii::$app->urlManager->createUrl('/ajax/ajax?id=').'"+$(this).val());

И html в контролере это адская ересь. Используйте renderAjax, это решит вопрос с
Самое интересное что возвращает мне полную копию страницы

public function actionAjax($id){
       return $this->renderAjax('_some_view',[
                  'model' => ModelCar::find()
            ->where(['id_mark' => $id])->all();
       ]);
    }

render - страница с layout, renderAjax - только то что во view.
И я бы вместо $models->count(); юзал count($models); Зачем 2 запроса делать? А в Вашем случае можно даже if(isset($models[0])){ не замерял, но теоретически быстрее должно работать. Хотя можно еще if(is_array($models)){ и если не изменяет память то можно даже так if($models){
Ответ написан
Ваш ответ на вопрос

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

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