在Yii中使用AJAX更新多语言内容

在Yii中使用AJAX更新多语言内容,ajax,yii,Ajax,Yii,请参阅下面的我的代码,当用户单击en按钮时,内容将更改为英文,而单击tw按钮时,内容将更改为中文 但是,每次用户单击en或tw按钮时,页面都会刷新。我想问,在这种情况下,如何实现AJAX内容更新 结果是,当用户单击en或tw按钮时,页面将不会刷新以更改内容语言 谢谢 我参考了Yii文件,但似乎不适合我的情况 C:\wamp\www\website\protected\views\site\index.php <?php $lang = isset($_GET["lang"]) ? $_GE

请参阅下面的我的代码,当用户单击
en
按钮时,内容将更改为英文,而单击
tw
按钮时,内容将更改为中文

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

结果是,当用户单击
en
tw
按钮时,页面将不会刷新以更改内容语言

谢谢

我参考了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>


在这种情况下,最好的做法是重新加载页面,因为通常您需要更新太多,所以不值得更新

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

<?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',
)
);
?>
然后,在视图文件中,您只需

<?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',));?>


谢谢您的回答,因此您的建议是用ajax更新/替换相关的HTML标记?如果您编写的操作呈现了部分页面(或大部分页面),那么是的,使用ajax可以相当轻松地完成。我将用一个示例更新我的响应。代码示例为+1。另外,您能解释一下CHtml::normalizeUrl的用法吗?如果您有多个参数,则ThanksCHtml::normalizeUrl非常有用,否则您可以使用CController的createUrl($this->createUrl in view)。
<?php echo CHtml::ajaxSubmitButton('tw', CHtml::normalizeUrl(array('site/index')),
    array('update'=>'#content_div',));?>