ajax dropDownList и опять аякс в новом dropDownList

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
mapxyz
Сообщения: 7
Зарегистрирован: 2012.08.02, 13:01

ajax dropDownList и опять аякс в новом dropDownList

Сообщение mapxyz »

Смысл задачи такой:
- первый dropDownList делает обращение к контроллеру и возвращает другой dropDownList из контроллера

- второй dropDownList (тот который вернул предыдущий) должен делать опять аякс запрос но тут возникает проблема.
если возвращать просто скритп и текст например "апвап<script>alert('fdg');</script>" тогда он выполняется но когда возвращаю конструкцию dropDownList она не работает, в плане того что <select> появляется однако скрипт который закреплен не работает


Код в слое с первоначальный dropDownList

Код: Выделить всё

<?php 
                             
                            echo CHtml::dropDownList('country', '', Moto::model()->dropDown2('',0), array(
                                                            'empty'=>Yii::t('default', 'Выберите марку'),
                                                            'class'=>"select-panel__select",
                                                            'ajax'=>array(
                                                                'type'=>'GET',
                                                                'url'=>CController::createUrl('site/scatmoto'), 
                                                                'update'=>'#models',
                                                                 
                                                                'success' => 'function(html,script,script1){
                                                                           jQuery("#models").html(html);
                                                                           eval(script1);
                                                                             
                                                                        }',
                                                                'data'=>array(
                                                                    'id'=>'js:this.value',
                                                                    'to'=>'models'
                                                                    ),
                                                            ),
                                                        ));
                                                        
                                         
                                                        ?>
                             
                            <span   id="models">
                            
                            </span>
                            
                            <span   id="volume">
                            </span>
код контроллера который возвращает код в #models

Код: Выделить всё

echo  CHtml::dropDownList('volume_', '', Moto::model()->dropDown2('',$_GET[id]), array(
                    'empty'=>Yii::t('default', 'Выберите модель'),
                    'class'=>"select-panel__select",
                    'ajax'=>array(
                        'type'=>'GET',
                        'url'=>CController::createUrl('site/scatmoto'), 
                        'update'=>'#volume',
                        'data'=>array(
                            'id'=>'js:this.value',
                            'to'=>'volume',
                            ),
                        'success' => 'function(html){
                                           alert(html);
                                        }',
                         
                    ),
                )); 
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: ajax dropDownList и опять аякс в новом dropDownList

Сообщение futbolim »

возвращайте не select а массив данных:

Код: Выделить всё

echo/return (не помню) CJavascript::encode(CHtml::listData(array()));
 
вобщем Ваш формат.
Так будет работать
mapxyz
Сообщения: 7
Зарегистрирован: 2012.08.02, 13:01

Re: ajax dropDownList и опять аякс в новом dropDownList

Сообщение mapxyz »

да если оставлять пустые dropDownList и подгружать им строку типа <option></option>

CHtml::listData(array()) - возвращает просто массив с определенными ключами не вопспринимает
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: ajax dropDownList и опять аякс в новом dropDownList

Сообщение futbolim »

Мой пример. 3 селекта (страны, регионы, города). При выборе страны, подгружаются регионы и т.д. Работает "на ура".

Код: Выделить всё

                <td>
                    Страна<span class="red">*</span>:<br />
                    <?php echo $form->dropDownList($model, 'country', Country::selectShowenCountries(), array(
                        'id' => 'country-input',
                        'onchange' => 'input_onchange("country","'.Yii::app()->urlManager->createUrl('dropDownList/getNeededRegions').'");',
                    )); ?>
                    <?php echo $form->error($model, 'country'); ?>
                </td>
                <td>
                    Регион<span class="red">*</span>:<br />
                    <?php echo $form->dropDownList($model, 'region', count($model->region_array) ? $model->region_array : array('Выберите регион'), array(
                        'id' => 'region-input',
                        'onchange' => 'input_onchange("region","'.Yii::app()->urlManager->createUrl('dropDownList/getNeededCities').'");',
                        //'disabled' => 'disabled',
                    )); ?>
                    <?php echo $form->error($model, 'region'); ?>
                </td>
zhuk99
Сообщения: 20
Зарегистрирован: 2012.03.25, 15:00

Re: ajax dropDownList и опять аякс в новом dropDownList

Сообщение zhuk99 »

Вот мой код с категорией и подкатегорией.
вьюха:

Код: Выделить всё

    <?php echo $form->dropDownListRow($model,
            'category_id', 
            Post::getCategories(),
           //html options
            array('ajax' => array(
                        'type'   => 'POST',
                        'url'    => $this->createUrl('post/changeSubCat'),
                        'update' => '#'.CHtml::activeId($model,'sub_cat_id'),                        
                    ))            
            ); ?>
    
    
    <div id="subcat_row"> 
        <?php echo $form->dropDownListRow($model,
            'sub_cat_id', 
            Post::getSubCategories(1)
                ); ?>
модель:

Код: Выделить всё

public static function getCategories ()
        {
            $cats = Category::model()->findAll('parent_id=0');
            $res = array();
            foreach ($cats as $cat) {
              $res[$cat->id] = $cat->name;  
            } 
            return $res;            
        }
        
        public static function getSubCategories ($idParent)
        {
            if (!$idParent)
            {
                $idParent =1;
            }
            $data = Category::model()->findAll('parent_id=:sel', array (':sel'=>$idParent));
            $res = array();
            if (count($data)!=0)
            {$res[0] = "Без подкатегории";}
            foreach ($data as $cat) {
              $res[$cat->id] = $cat->name;  
            } 
            return $res;            
        }
контроллер:

Код: Выделить всё

 public function actionChangeSubCat(){
            
                $selectedCat = $_POST['Post']['category_id'];

                $data = Post::getSubCategories($selectedCat);
                 foreach($data as $value=>$subcategory)  {
                        echo CHtml::tag
                                ('option', array('value'=>$value),CHtml::encode($subcategory),true);
                    }
                
        }
Аватара пользователя
resurtm
Сообщения: 299
Зарегистрирован: 2010.12.19, 09:13
Откуда: Казахстан, Алма-Ата
Контактная информация:

Re: ajax dropDownList и опять аякс в новом dropDownList

Сообщение resurtm »

aiaal_n
Сообщения: 11
Зарегистрирован: 2017.07.15, 07:22

Re: ajax dropDownList и опять аякс в новом dropDownList

Сообщение aiaal_n »

zhuk99 писал(а): 2012.08.10, 19:19 Вот мой код с категорией и подкатегорией.
вьюха:

Код: Выделить всё

    <?php echo $form->dropDownListRow($model,
            'category_id', 
            Post::getCategories(),
           //html options
            array('ajax' => array(
                        'type'   => 'POST',
                        'url'    => $this->createUrl('post/changeSubCat'),
                        'update' => '#'.CHtml::activeId($model,'sub_cat_id'),                        
                    ))            
            ); ?>
    
    
    <div id="subcat_row"> 
        <?php echo $form->dropDownListRow($model,
            'sub_cat_id', 
            Post::getSubCategories(1)
                ); ?>
модель:

Код: Выделить всё

public static function getCategories ()
        {
            $cats = Category::model()->findAll('parent_id=0');
            $res = array();
            foreach ($cats as $cat) {
              $res[$cat->id] = $cat->name;  
            } 
            return $res;            
        }
        
        public static function getSubCategories ($idParent)
        {
            if (!$idParent)
            {
                $idParent =1;
            }
            $data = Category::model()->findAll('parent_id=:sel', array (':sel'=>$idParent));
            $res = array();
            if (count($data)!=0)
            {$res[0] = "Без подкатегории";}
            foreach ($data as $cat) {
              $res[$cat->id] = $cat->name;  
            } 
            return $res;            
        }
контроллер:

Код: Выделить всё

 public function actionChangeSubCat(){
            
                $selectedCat = $_POST['Post']['category_id'];

                $data = Post::getSubCategories($selectedCat);
                 foreach($data as $value=>$subcategory)  {
                        echo CHtml::tag
                                ('option', array('value'=>$value),CHtml::encode($subcategory),true);
                    }
                
        }
а как это сделать на yii2?
Ответить