使用AJAX的Yii下拉不能按预期工作

时间:2014-07-15 10:56:10

标签: php ajax yii

我有以下名为'findreseller.php'的视图:

<?php

$countries = CHtml::listData(Country::model()->findAll(), 'id', 'name');

echo CHtml::dropdownlist('find_reseller', '', $countries,
    array('ajax'=>array(
            'type'=>'POST',
            'url'=>Yii::app()->getController()->createAbsoluteUrl('/webcare/reseller/loadAjaxData'),
            'update' =>'#data',
            )
         )
    );

?>
<div id="data">
   <?php $this->renderPartial('_ajaxContent', array('dataProvider'=>$dataProvider))?>
</div>

_ajaxContent只是回应结果,没有什么特别的...... 您可以看到下拉列表是使用CHtml生成的,因为我不需要表单。我只需要一个onChange事件来做某事......

根据后面的代码,'/webcare/reseller/loadAjaxData'我有:

public function actionLoadAjaxData() {
    $country = $_POST['find_reseller'];
    //do something...
    $dataProvider=new CArrayDataProvider($country_reseller);

    $this->render('findreseller', array('dataProvider' => $dataProvider));
}

我可以说我错过了什么,但我不确定到底是什么。

修改

像这样修改:

 <?php
 //CHtml::form();
 $countries = CHtml::listData(Country::model()->findAll(), 'id', 'name');

 echo CHtml::dropdownlist('find_reseller', '', $countries,
    array(
        'ajax' => array(
            'type'=>'POST', //request type
            'url'=>CController::createUrl('/webcare/reseller/loadAjaxData'), //url to call.
            //Style: CController::createUrl('currentController/methodToCall')
            'update'=>'#city_id', //selector to update
            'data'=>'js: $(this).val()', 
            //leave out the data key to pass all form values through
        )
    )
 ); 

 //empty since it will be filled by the other dropdown
 echo CHtml::dropDownList('city_id','', array());
 //CHtml::endForm();
 ?>
 <div id="data">
    <?php $this->renderPartial('_ajaxContent', array('dataProvider'=>$dataProvider))?>
 </div>

现在我明白了:

http://prntscr.com/42wwx6

我有以下控制器操作:

 public function actionLoadAjaxData() {
    $country = $_POST['country_id'];
    ...
    $dataProvider=new CArrayDataProvider($country_reseller);

    $data = User::model()->findAll('country_id=:country_id AND reseller=:reseller', 
              array(':country_id'=>(int) $_POST['country_id'], ':reseller'=>1));

    $data=CHtml::listData($data,'city','city');
    foreach($data as $value=>$name)
    {
        echo CHtml::tag('option',
                   array('value'=>$value),CHtml::encode($name),true);
    }

    $this->render('action_name', array('dataProvider' => $dataProvider));
}

编辑2

如果我在actionLoadAjaxData()中写一个骰子,就在开头,方法加载正常,操作正常,服务器回答200.

0 个答案:

没有答案