使用AJAX在Yii上创建依赖下拉列表

时间:2015-03-19 01:44:30

标签: php ajax yii

在编程方面,我是一个新手,但我正在努力变得更好。话虽如此,我会谈到这一点。我正在开发一个中型应用程序,其中一个模块负责新用户的注册。表格包括用户的位置,除以3:国家(Paises),省(Provincias)和地点(Localidades),您可能已经猜到了,一个国家/地区包含多个省份,一个省有很多位置像这篇文章我用作Yii Framework's Wiki的指南。尽管我尝试了所有的努力,但我的工作仍然无法完成,省份下拉列表从未填充过,我甚至无法尝试没有省份的地点。

以下是View中的代码:

<div class="row">
    //This is the part that handes the Countries, it loads all the countries properly on the dropdownlist.
    <?php echo CHtml::label('Pais','paises_id',array ('required'=>true));?>
    <?php 
        $pmodels = Paises::model()->findAll();
        $data = array();
        foreach ($pmodels as $m)
        $data[$m->id] = $m->nombre;    
        echo CHtml::dropDownList('paises_id', '', $data ,array('empty' => 'Seleccione su pais de procedencia'),
            array(
                'ajax' => array(
                    'type'=>'POST',
                    'url'=>CController::createUrl('estudiantes/cargarprovincias'),
                    'update'=>'#provincias_id', //selector to update
                    )
                )
            );
    ?>
</div>

<div class="row">
    //This is the part that handles provinces (it doesn't work)
    <?php echo CHtml::label('Provincia','provincias_id',array ('required'=>true));?>
    <?php echo CHtml::dropDownList('provincias_id','', array(), array('empty' => 'Seleccione su provincia de procedencia'),
            array(
                'ajax' => array(
                    'type'=>'POST',
                    'url'=>CController::createUrl('estudiantes/cargarlocalidades'), //url to call.
                    //Style: CController::createUrl('currentController/methodToCall')
                    'update'=>'#'.CHtml::activeId($model,'local_id'), //selector to update
                    )
                )
            );
    ?>
</div>

<div class="row">
    //This handles the locations
    <?php echo $form->labelEx($model,'local_id'); ?>
    <?php echo CHtml::dropDownList('local_id','', array(),array('empty' => 'Seleccione su localidad de procedencia'));?>
    <?php echo $form->error($model,'local_id'); ?>
</div>

这是我为控制器制作的代码,遵循Wiki:

public function actionCargarprovincias()
{
    $data=Provincias::model()->findAll('parent_id=:parent_id', 
              array(':parent_id'=>(int) $_POST['paises_id']));

    $data=CHtml::listData($data,'id','nombre');
    foreach($data as $value=>$nombre)
    {
        echo CHtml::tag('option',
               array('value'=>$value),CHtml::encode($nombre),true);
    }
}
public function actionCargarlocalidades()
{
    $data=Localidades::model()->findAll('parent_id=:parent_id', 
              array(':parent_id'=>(int) $_POST['provincias_id']));

    $data=CHtml::listData($data,'id','nombre');
    foreach($data as $value=>$nombre)
    {
        echo CHtml::tag('option',
               array('value'=>$value),CHtml::encode($nombre),true);
    }
}

我想知道我是否错过了什么或者我是否做错了。有人可以给我一些指导吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试过YII refer this link

中的关系