在Yii 1.0框架中使用Ajax
{Brief}
Yii中的ajax部分已经真的非常弱智了,sorry我用了弱智这样一个形容词,真的太容易了,你都不需要会jQuery,当然会一点就更好了,代码很简单直接读就可以了,唯一要说明得就是,一定要用render否则无法加载jquery文件,第一个级联菜单,第二个在菜单基础上,选择一个国家,然后触发是在文本框里输入一个不同的值,按tab。
这个版本只是基础版本, 有一个后续版本请阅读后续版本获得更多信息. 后续版本
{Plan A : Basic One}
{Controller}
//Ajax Upgrade public function actionACountry() { $this->render('ac'); } public function actionAcity() { $arrCity = array( '1'=>array('1'=>'NY', '2'=>'Bosston', '3'=>'DC'), '2'=>array('1'=>'Paris', '2'=>'Versailles', '3'=>'Nice'), '3'=>array('1'=>'Tokyo', '2'=>'Osaka', '3'=>'Nagoya'), ); @$intCid = (int)$_POST['country_id']; if (!empty($intCid)) foreach ($arrCity[$intCid] as $key=>$cityName) echo CHtml::tag('option', array('value'=>$key), CHtml::encode($cityName), true ); }
{View : ac.php}
echo CHtml::beginForm(); echo CHtml::dropDownList( 'country_id', '', array('0'=>'Choice One', '1'=>'USA', '2'=>'France', '3'=>'Japan',), array( 'ajax'=>array( 'type'=>'POST', 'url'=>Yii::app()->createUrl('lab/acity'), 'update'=>'#city_id', // 'data'=>'js:javascript statement', ))); echo CHtml::dropDownList('city_id', '', array('Country First')); echo CHtml::endForm();
{Plan B : Advantage One}
{Controller}
//Ajax Upgrade public function actionACountry() { $this->render('ac'); } public function actionAcity() { $arrCity = array( '1'=>array('1'=>'NY', '2'=>'Bosston', '3'=>'DC'), '2'=>array('1'=>'Paris', '2'=>'Versailles', '3'=>'Nice'), '3'=>array('1'=>'Tokyo', '2'=>'Osaka', '3'=>'Nagoya'), ); @$intCid = (int)$_POST['country_id']; if (!empty($intCid)) foreach ($arrCity[$intCid] as $key=>$cityName) echo CHtml::tag('option', array('value'=>$key), CHtml::encode($cityName), true ); echo '<pre>'; print_r($_POST); print_r($arrCity[$intCid]); echo '</pre>'; }
{View : ac.php}
echo CHtml::beginForm(); echo CHtml::dropDownList( 'country_id', '', array('0'=>'Choice One', '1'=>'USA', '2'=>'France', '3'=>'Japan',), array( 'ajax'=>array( 'type'=>'POST', 'url'=>Yii::app()->createUrl('lab/acity'), 'update'=>'#city_id', // 'data'=>'js:javascript statement', ))); echo CHtml::dropDownList('city_id', '', array('Country First')); echo '<div>'.CHtml::textField('TSource','',array('ajax'=>array( 'type'=>'POST', 'url'=>'acity', 'update'=>'#TOut', 'data'=>'js:jQuery("#country_id").serialize()', ))); echo CHtml::textArea('TOut','',array('cols'=>'120','rows'=>'30')); echo CHtml::endForm();
留言