我正在一个网站上工作并拥有3个不同的分支机构。典型的开发 - >阶段 - >生产情况。
所有3个在3个不同的网址上运行:
所以我试图在所有3上运行通用代码,而不对文件路径进行任何修改。
为了达到这个目的,我只有base_path
var set,以及为此特定分支配置的CodeIgniter安装。
var base_url = "<?=base_url();?>"; // This sets base_url accordingly.
$.post(base_url + 'login/ajaxLogin', { // See note below
login_email: $('#login_email').val(),
login_pass: $('#login_pass').val(),
},
function(data) {
if(data == 'true') {
window.location.href = base_url;
} else {
$('h2').replaceWith('<h2 style="color:#b81900;">Login Failed</h2>');
return false;
}
});
以上代码在Chrome中运行良好。但它在Safari和Firefox中不起作用。
在Firefox中它无声地失败,在Safari中我得到"Unable to load resource: cancelled"
注意:如果我删除了base_url
,只需将脚本路径设置为/login/ajaxLogin
,/dev/login/ajaxLogin
或/stage/login/ajaxLogin
一切正常。
看来我可能会遇到跨域脚本限制,但我不确定为什么?
是的,我熟悉Same Origin Policy,是的,我在jQuery的网站上看过这个:
由于浏览器安全限制,大多数“Ajax”请求都是相同的来源 政策;请求无法从不同域,子域中成功检索数据, 或协议。
如果带有
jQuery.post()
的请求返回错误代码,则除非存在错误,否则它将无提示失败 脚本也调用了全局.ajaxError()
方法。
以上这些都不适用于我的情况,因为我在我的域内,所以我不完全确定发生了什么,但我真的想找到解决此问题的方法。
答案 0 :(得分:1)
我不熟悉CodeIgniter,但除非该函数将值包装在引号中,否则您需要自己包装它。
var base_path = "<?= base_path(); ?>";