多语言i18n库干扰ajax调用

时间:2012-01-11 14:33:02

标签: codeigniter jquery internationalization routes

我正在使用Codeigniter和i18n库来构建一个多语言网站。我跟着this guide,它运行正常。

显然,问题存在于我必须通过jQuery调用jj中的页面$.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中所述。显然我不能在javascript文件中使用php函数,因此,在view中,在加载脚本之前,我把它放在:

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

现在我有了前缀的路径,无论我需要它。这有点难看。你认为还有更好的办法吗?

1 个答案:

答案 0 :(得分:0)

首先,您可以使用window.location.pathname获取/website/en/photos/change_product部分,然后使用某些substr或regexp获取当前语言,并将其添加到被叫网址,如果您不想将js添加到您的网址中php脚本,或添加控制器:

  // special URIs (not localized)
    private $special = array (
        "admin"
    );
MY_Lang.php文件中

。这样,如果缺少语言前缀,则不会重定向该数组中的控制器。您可以为ajax调用创建控制器并将其添加到数组中,或者在My_Lang中重写位函数,以便它可以检查整个地址而不仅仅是控制器。