2012-12-26 62 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)是完美的解決方案 –