我在YII中遇到ajax问题。 我使用this link作为exaple来测试项目中的ajax并使用依赖的下拉列表。
表格代码(protected / views / game / _form.php):
<?php
echo $form->dropDownList($model, 'season_id', Season::getSeasonsList(), array(
'ajax' => array(
'type'=>'POST',
CController::createUrl('Game/selectGameStages'),
'update'=>'#Game_season_game_stage'
)
)
);
?>
控制器代码(protected / Controller / GameController.php):
public function actionSelectGameStages()
{
echo CHtml::tag('option', array('value'=>'1'), 'Some output 1', true);
echo CHtml::tag('option', array('value'=>'2'), 'Some output 2', true);
echo CHtml::tag('option', array('value'=>'3'), 'Some output 3', true);
}
Ajax正在运行,但是调试器如果建立了代码,那么我的Game_season_game_stage选择中的代码就是我网站整个页面的html代码,如
<select name="Game[season_game_stage] id="Game_season_game_stage">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
<div class="container" id="page">...</div>
请帮助理解为什么加载页面的整个代码而不是selectGameStages函数的代码? Yii版本是1.14。 对不起我的英语不好。 THX。
答案 0 :(得分:0)
输出后只需退出。
public function actionSelectGameStages()
{
// Do stuff
...
exit;
}
答案 1 :(得分:0)
为什么不直接在视图中使用下拉列表?
ES。
<?php echo CHtml::dropDownList('listname', $select,
array('M' => 'Male', 'F' => 'Female'),
array('empty' => '(Select a gender)'));
答案 2 :(得分:0)
感谢您的所有答案!我找到了解决方案。
在protected / views / game / _form.php中我错过了'url'键并重命名为game / selectGameStages
<?php
echo $form->dropDownList($model, 'season_id', Season::getSeasonsList(), array(
'ajax' => array(
'type'=>'POST',
'url' => CController::createUrl('game/selectGameStages'),
'update'=>'#Game_season_game_stage'
)
)
);
?>
之后我用这段代码更新了控制器代码(protected / Controller / GameController.php)
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view', 'selectGameStages'),
'users'=>array('*'),
感谢您的帮助!
答案 3 :(得分:0)
由于您的布局,您的整个页面正在加载
在您的控制器中检查此调用是否为ajax调用,将布局更改为某些布局而不使用这些标记,或者更好地为ajax调用创建布局,
if($this->getIsAjaxRequest())
$this->layout = '//ajax'; // ajax layout