多语言i18n库干扰ajax调用
问题描述:
我使用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'))?>";
现在我有前缀的地方,我需要它的路径。这有点难看。你认为有没有更好的方法来做到这一点?
答
首先,你可以使用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
中的某个位功能,以便它可以检查整个地址,而不仅仅是控制器。