【问题标题】:jQuery $.post() and full URL'sjQuery $.post() 和完整的 URL
【发布时间】:2011-03-15 02:44:23
【问题描述】:

我在一个网站上工作,拥有 3 个不同的分支机构。典型的 dev->stage->production 情况。

所有 3 个都在 3 个不同的 url 上运行:

产品:http://www.domain.com

舞台:http://www.domain.com/stage

开发者:http://www.domain.com/dev

所以我试图让通用代码在所有 3 个上运行而不对文件路径进行任何修改。

为了实现这一点,我只设置了base_path var 设置为为此特定分支配置的任何 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()方法。

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

【问题讨论】:

  • 我要问第一个愚蠢的问题,但是 base_path 函数是否在所有实例中都返回相同的路径?
  • 首先,查找这个 PHP 实际生成的 Javascript 是值得的,其次,使用 Chrome 开发者工具或 Firebug 来查找失败请求的 URL。
  • base_url() 会在 url 中添加一个斜杠,因此您可能会得到类似 http://url.com//stage/login/ajaxLogin 这样的东西,这可能会让事情变得很糟糕。正如@Matchu 所说,检查正在生成的 URL。
  • @jerebear:是的,我相信确实如此。我登录到控制台,它看起来不错。 @Matchu:是的,我使用了开发工具和萤火虫。还查看了服务器日志。一切看起来都一样,除了 Firefox 执行 OPTIONS 请求而不是 POST @stormdrain:是的。我知道,这就是为什么我有 base_url + 'login/ajaxLogin' 来补偿斜杠
  • 看起来您正在设置一个名为“base_path”的变量,然后使用“base_url”?

标签: php firefox jquery safari google-chrome


【解决方案1】:

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

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

【讨论】:

  • 好电话。甚至没有注意到它是一个字符串。这可能是问题所在!
  • 我很抱歉,我已经用引号括起来了,我只是没有复制/粘贴它。 var base_url = "&lt;?=base_url();?&gt;";
猜你喜欢
  • 2013-03-09
  • 2013-12-12
  • 2020-12-06
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2022-11-16
  • 2020-06-04
  • 2016-02-29
相关资源
最近更新 更多