2011-04-21 14:25:19 0 评论 Yii 1.0 Boy.Lee

在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();