2012-01-11 89 views
0

我使用Codeigniter和i18n库建立多语言网站。我跟着this guide,它工作正常。多语言i18n库干扰ajax调用

显然存在的问题是,在页面中,我必须通过jQuery调用jQuery,通过$.getJson

console.log('1'); 
return $.getJSON("photos/change_product", json_data, function(data) { 
    console.log('2'); 

在这段代码中,例如,在控制台它只打印“1”。用Firebug我看到,对于GET调用的URL看起来像这样:

GET http://localhost/website/photos/change_product?product_id=1 
GET http://localhost/website/en/photos/change_product 

我试图禁用库和页面的工作,因为它应该,所以我敢肯定有这个库中的冲突,但我真的不知道从哪里开始寻找。任何建议?

编辑:我部分解决了这个问题。至少,我找到了解决方法。 好像我应该在javascript中使用函数site_url(),以便它创建正确的链接,如库的wiki中所解释的。很明显,我不能使用PHP函数一个JavaScript文件,以便里面,一个view,加载脚本之前,我把这个:

<script type="text/javascript"> 
var siteurl = "<?=dirname(site_url('a'))?>"; 

现在我有前缀的地方,我需要它的路径。这有点难看。你认为有没有更好的方法来做到这一点?

回答

0

首先,你可以使用window.location.pathname获得/website/en/photos/change_product部分,然后一些SUBSTR,或正则表达式来获得当前的语言,并将其添加到称为URL如果你不想JS添加到您的PHP脚本,或添加控制器:

// special URIs (not localized) 
    private $special = array (
     "admin" 
    ); 

in MY_Lang.php file。这样,如果语言前缀丢失,该阵列中的控制器将不会被重定向。您可以为ajax调用创建控制器并将其添加到数组中,或者重写My_Lang中的某个位功能,以便它可以检查整个地址,而不仅仅是控制器。