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