【问题标题】:Multilingual i18n library interfering with ajax calls多语言 i18n 库干扰 ajax 调用
【发布时间】:2012-01-11 14:33:02
【问题描述】:

我正在使用带有 i18n 库的 Codeigniter 来构建多语言网站。我关注了this guide,效果很好。

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

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

现在我有了前缀路径,无论我需要它。只是有点难看。您认为有没有更好的方法来做到这一点?

【问题讨论】:

    标签: codeigniter jquery internationalization routes


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2019-02-01
      • 2013-03-31
      • 1970-01-01
      • 2017-12-06
      相关资源
      最近更新 更多