Yii ajax加载整页而不是输出

时间:2014-02-13 21:17:24

标签: ajax yii

我在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。

4 个答案:

答案 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)'));

http://www.yiiframework.com/wiki/48/by-example-chtml/#hh5

答案 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