2012-12-26 60 views
0

在视图中我有一个HTML选择元件如PHP Yii框架和jQuery AJAX的getJSON

<select id="g" name="g" style="width: 160px; height: 26px; background-color: white; border: 2px solid silver; padding: 0px 4px 0px 4px; box-shadow: 4px #333333;"> 
    <option value="value1">Value1</option> 
    <option value="value2">Value2</option> 
    <option value="value3">Value3</option> 
    <option value="value4">Value4</option> 
</select> 

和在控制器我有作为动作的跟随

public function actionGetCategories($genre) { 
    if(isset($genre)) { 

     $c = new Category();    

     return CJSON::encode($c->findAll(array(
      'select'=>'category', 
      'condition'=>'genre = \'' . $genre .'\'' 
     ))); 
    } else { 
     return 0; 
    } 

所以,我就像当用户改变select元素时,应用程序会自动更改另一个名为“c”的select元素的元素列表。我试图通过以下JS代码来做到这一点:

<script type="text/javascript"> 
    $(function() { 
     $("#g").change(function() { 
      var items = "<option>All categories</option>"; 
      var self = $(this); 

      $.getJSON("<?php echo $this->createUrl('site/getcategories', array('genre'=>'value')) ?>", 
       function (data) { 
        $.each(data, function (index, item) { 
         items += "<option>" + item + "</option>"; 
        }); 
       $("#c").html(items); 
      }); 
     }); 
    }); 
    </script> 

但是不行!我也尝试使用完整的根URL将“.getJSON url”参数更改为“http://localhost/project/index.php?r = site/getcategories & genre = value”,但没有任何结果。可以帮助别人吗?

谢谢。

+0

什么是你从Ajax响应得到些什么?错误是什么? – Asgaroth

+0

您是否使用生成的Yii表单(CActiveForm或CHtml表单)? –

回答

1

如果使用CActiveForm小部件来构建形式或了CHtml帮手,你可以做到这一点没有任何代码看起来JavaScript的这个例子:

echo $form->dropDownList($model, 'company_id', $model->getCompanyProjectOptions(),array('empty'=>'--select company--','ajax'=>array 
        (
         'url' => CController::createUrl('/project/updateProjects'), //only if you want an action here 
         'type' => 'get', 
         'data' => array('id' => 'js:$(this).val()'), 
         'update' => '#projects-list', //or any other jQuery selector 
        ))); 

,并在控制器中的updateProjects动作可以是这样的:

public function ActionUpdateProjects($id) { 
     $model = new Project; 
     $criteria = new CDbCriteria(); 
     $criteria -> addCondition('company_id=' . (int)$id); 
     $criteria -> scopes = array('noRemove', 'noArchive'); 
     $criteria -> order = 'prj_nom'; 
     $data = Project::model() -> findAll($criteria); 
     if (is_array($data) && !empty($data)) { 
      echo CHtml::activeLabel($model, 'prj_parent_id'); 
      echo $data = CHtml::activeDropDownList($model, 'prj_parent_id', CHtml::listData($data, 'prj_id', 'prj_name'), array('empty' => '-- Select parent --')); 
     } 
    } 

而且不要在accessRule函数中赋予此操作权限。

http://www.yiiframework.com/wiki/24/

希望这有助于

+0

谢谢Cherif BOUCHELAGHEM,但是我已经解决了在我的控制器操作中更改一行的问题:而不是“返回”,我已经用“echo”和其他一些指令来替换查询的结果。 – fpellegrino

+0

欢迎您,如果您使用json echo CJSON($ data)是完美的解决方案 –