我在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)
出现这个错误可能有很多原因,但是因为你的应用程序正在运行,我猜你的代码有问题。你的代码看起来很好,除了这两个点,我猜可能是一个问题:
-
将
echo $form->DropDownList
改为echo $form->dropDownList
-
将
'update'=>'#branch'
更改为正确的id
,确保branch
是第二个下拉框的id
,通常是ModelName_name
,所以它应该像'update'=>'#ModelName_branch'
。检查浏览器中的第二个下拉菜单,以确定id
是什么
做这些改变,看看它现在是否工作。
你还应该启用错误记录来检查错误,这里有一个链接。
编辑:正如@Hearaman的回答,你也应该将$_POST['sna']
更改为$_POST['ModelName']['sna']