jQuery $ .post()和完整的URL

时间:2010-07-13 02:47:34

标签: php firefox jquery safari google-chrome

我正在一个网站上工作并拥有3个不同的分支机构。典型的开发 - >阶段 - >生产情况。

所有3个在3个不同的网址上运行:

  

prod:http://www.domain.com

     

阶段:http://www.domain.com/stage

     

dev:http://www.domain.com/dev

所以我试图在所有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()方法。

以上这些都不适用于我的情况,因为我在我的域内,所以我不完全确定发生了什么,但我真的想找到解决此问题的方法。

1 个答案:

答案 0 :(得分:1)

我不熟悉CodeIgniter,但除非该函数将值包装在引号中,否则您需要自己包装它。

var base_path = "<?= base_path(); ?>";