2015-02-07 65 views
0

我正在努力研究如何使用Codeigniter语言系统即时更改语言。所以我做了这个Ajax调用,但显而易见,值不会改变,直到我重新加载页面unlease我以某种方式打印出值或在由AJAX调用的函数中设置变量?这样做的最好方法是什么?Codeigniter:实时更改语言(AJAX)

<script> 
$(function(){ 
    $('.lang-choices a').on('click' , function() { 
     var language = $(this).attr("data-lang"); 
     $.ajax({ 
     type: "POST", 
     url: js_site_url('langswitch/switchLanguage'), 
     data: "requestedLanguage=" + language, 
     cache: false, 
     success: function(html){ 
     }, 
     error:function(exception){alert('Exeption:'+exception);} 
     }); 
    return false; 
    }); 
}); 
</script> 

switchLanguage功能

public function switchLanguage() 
    { 
    $language = $this->input->post('requestedLanguage'); 
    $this->session->set_userdata('site_lang', $language); 
    } 
+0

简单的ajax调用不会重新渲染页面。如果您想更改渲染页面的语言,您需要搜索并用新语言字符串替换所有项目。 – Mouser 2015-02-07 12:54:47

回答

1

你的问题有点不清楚,所以我作出的假设是,你翻转改变来自服务器的输出后端标志。使用这一假设,这里就是我想要的数量级建议:

  • 在你success处理程序,重装使用window.location.reload(true)的页面。真正的参数是必不可少的,因为它会访问服务器以获取新数据。 https://developer.mozilla.org/en-US/docs/Web/API/Location.reload

  • 您的成功处理程序似乎将html作为参数。我不确定你是否实际发送的是基于你的switchLanguage函数,或者如果这是从复制+粘贴到某处的剩余部分。如果你确实得到HTML数据和它的页面数据,我会用context optionhttp://api.jquery.com/jquery.ajax/)向下过滤到您收到那么该文件的内容与此数据

这里是取代我的网页内容后者的一个例子:

$.ajax({ 
    type: 'POST', 
    url: js_site_url('langswitch/switchLanguage'), 
    data: 'requestedLanguage=' + language, 
    cache: false, 
    context: document.body, 
    success: function(html){ 
     // or similar 
     $('body').replaceWith(html); 
    }, 
    error: function(exception) { 
     alert('Exeption:' + exception); 
    } 
});