依赖的下拉式内部服务器错误(500)


Dependent Dropdown internal server error(500)

我在StackOverFlow中发现了这个问题。但我得到了不同的误差。我正试图在yii中实现依赖下拉。值是从数据库到第一个下拉列表。但是我无法在第二个下拉菜单中得到结果输出。

控制器:

public function actionDynamic(){
        $data=Stu::model()->findAll('sna=:parent_id', 
              array(':parent_id'=>$_POST['sna']));
        // var_dump($data);
        // exit();
    $data=CHtml::listData($data,'branch','branch');
    // var_dump($data);
    // exit();
    foreach($data as $value=>$name){
        echo CHtml::tag('option',
                   array('value'=>$value),CHtml::encode($name),true);
    }
}

视图:

<div class="row">
    <?php echo $form->labelEx($model,'sna'); ?>
        <?php  
        $snaArray = CHtml::listData(Stu::model()->findAll(),'sna','sna');
               echo $form->DropDownList($model,'sna',$snaArray,
                        array(
                            'ajax' => array(
                            'type'=>'POST',
                            'url'=>CController::createUrl('stu/dynamic'),
                            'update'=>'#branch')));
                ?>
    <?php echo $form->error($model,'sna'); 
    // var_dump($snaArray);
    //  exit();
    ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'branch'); ?>
    <?php echo CHtml::dropDownList('branch','', array(), array('prompt'=>'Select Branch')); ?>
    <?php echo $form->error($model,'branch'); ?>
</div>
表:

sid int
sna varchar(25)
branch varchar(5)

我遵循这个链接http://www.yiiframework.com/wiki/24/来实现依赖下拉

没有显示任何错误。但在网络选项卡(f12键),然后改变第一个下拉,它显示"http://localhost:8080/student/index.php?r=stu/dynamic" 500(内部服务器错误).

请帮助我提前谢谢。

问题在这里

$ _POST['系统网络体系结构(sna) ']

在ajax调用中,Post数据将以YourModel[property]

的形式出现
EX:
Stu['sna']
Stu['some_other']

所以,在你的动作中动态$_POST['sna']不能选择发布的值

改变:

  $data=Stu::model()->findAll('sna=:parent_id', array(':parent_id'=>$_POST['sna']));

  $data=Stu::model()->findAll('sna=:parent_id', array(':parent_id'=>$_POST['Stu']['sna']));

public function actionDynamic()
{
    $postValues=$_POST['Stu'];        
    $data = Stu::model()->findAll('sna=:parent_id', array(':parent_id' =>$postValues['sna'] ));
    $data = CHtml::listData($data, 'sna', 'sna');        
    foreach ($data as $value => $name)
    {
        echo CHtml::tag('option', array('value' => $value), CHtml::encode($name), true);
    }
}

500(Internal Server Error)

出现这个错误可能有很多原因,但是因为你的应用程序正在运行,我猜你的代码有问题。你的代码看起来很好,除了这两个点,我猜可能是一个问题:

  1. echo $form->DropDownList改为echo $form->dropDownList

  2. 'update'=>'#branch'更改为正确的id,确保branch是第二个下拉框的id,通常是ModelName_name,所以它应该像'update'=>'#ModelName_branch'。检查浏览器中的第二个下拉菜单,以确定id是什么

做这些改变,看看它现在是否工作。

你还应该启用错误记录来检查错误,这里有一个链接。

编辑:

正如@Hearaman的回答,你也应该将$_POST['sna']更改为$_POST['ModelName']['sna']