0

参考我下面的代码,当用户点击en按钮时,内容会变成英文,点击tw按钮时,内容会变成中文。

但是,每次用户单击entw按钮时,页面都会刷新。请问这种情况下如何实现AJAX内容更新?

结果是当用户单击其中一个entw按钮时,页面不会被刷新以更改内容语言。

谢谢

我在这里参考了 Yii 文档,但似乎不适合我的情况

C:\wamp\www\website\protected\views\site\index.php

<?php
$lang = isset($_GET["lang"]) ? $_GET["lang"] : "en_uk";
$lang = $lang == "en" ? "en_uk" : "zh_tw";

Yii::app()->setLanguage($lang);
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
    <input type="submit" value="en" name="lang" />
    <input type="submit" value="tw" name="lang" />
</form>

<div class="main">
    <?php echo Yii::t(Yii::app()->controller->id, "Causeway Bay"); ?>
</div>
4

1 回答 1

2

最佳做法是在这些情况下重新加载页面,因为通常您必须更新太多,以至于不值得。

也就是说,CHtml 的ajaxSubmitButton是实现这一点的最简洁的方法,因为您可以非常轻松地映射调用的每个事件。它看起来像这样:

<?php 
echo CHtml::ajaxSubmitButton('en', CHtml::normalizeUrl(array('site/changeLanguage')),
array(
    'error'=>'js:function(){
        alert("error");
    }',
    //if you add a return false in this, it will not submit. 
    'beforeSend'=>'js:function(){
        alert("beforeSend");                                            
    }',
    'success'=>'js:function(data){
        alert("success, data from server: "+data);
    }',
    'complete'=>'js:function(){
        alert("complete");
    }',
    //'update'=>'#where_to_put_the_response',
)
);
?>

当然,您不必使用每个参数。update 参数可以立即更新 HTML 标签。

编辑:如果您使用控制器的renderPartial方法,这可以很容易地完成,例如在您的站点控制器中,如果您有负责索引的操作。

public function actionIndex(){
   //get variables, etc


   if(Yii::app()->request->isAjaxRequest) {
      $lang = $_POST['nameOfSubmit'];

   }else {
      //...
   }
   //if the 3rd parameter is true, the method returns the generated HTML to a variable
   $page = $this->renderPartial('_page', array(/*parameters*/ ), true); 
   echo $page; 
}

然后,在您的视图文件中,您可以简单地拥有

<?php echo CHtml::ajaxSubmitButton('en', CHtml::normalizeUrl(array('site/index')),
array('update'=>'#content_div',));?>

<?php echo CHtml::ajaxSubmitButton('tw', CHtml::normalizeUrl(array('site/index')),
    array('update'=>'#content_div',));?>
于 2012-06-01T06:39:33.430 回答