【问题标题】:$.get - Origin not allowed$.get - 不允许来源
【发布时间】:2012-07-25 03:14:34
【问题描述】:

今天我在尝试使用$.get 在我的服务器上获取 PHP 文件的内容时遇到了一个非常奇怪的错误。

它只发生在 Mac OS X (Snow Leopard) 上的 Safari 和 Chrome 中,在 Windows 上它可以在所有浏览器中正常工作。

函数如下:

function _fc() {
   $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) {

      if (data=='0') { letItGo=true; $('#loginform').submit(); }
      else ...//Do some other checks
   });
}
  • 它不是本地服务器,而是具有现有域的 Web 服务器
  • 我不想执行任何跨域 ajax。两个文件都在同一个目录中。

我找不到任何解决方案。

确切的错误:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something.
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin.

【问题讨论】:

  • 当你说它只发生在 Mac OS X 上时,你指的是客户端操作系统,对吧?在您的 Mac OS X 测试和 Windows 测试中,它是同一台服务器吗?
  • 我知道这些是不同的浏览器,但在它们中我的代码都不起作用。我的服务器是基于 Unix 的,我只是在 Windows 和 Mac Os X 上进行测试。完全错误 - 请参阅已编辑的问题

标签: jquery ajax macos google-chrome


【解决方案1】:

www 在技术上是一个子域。所以你违反了same-origin policy。你可以通过设置来解决这个问题

function _fc() {
   document.domain = "www.asking1.com";
   $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) {

      if (data=='0') { letItGo=true; $('#loginform').submit(); }
      else ...//Do some other checks
   });
}

或者您可以完全限定您作为 AJAX 请求的一部分传递的 URL,以确保它是相同的。

【讨论】:

    【解决方案2】:

    您的答案在错误信息中:

    XMLHttpRequest 无法加载
    http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something。
    Access-Control-Allow-Origin 不允许来源 http://asking1.com。

    http://www.asking1.comhttp://asking1.com不同的来源,因此这违反了同源政策。见第六个例子here

    如果您的代码确实如引用的那样,带有相对 URL,则不应该发生这种情况,因为从错误消息来看,文档位于 http://asking1.com,因此相对路径将解析为 http://askign1.com/_x_fc.php,即很好。

    如果您的代码中有绝对路径,那就是您的问题。只需将其删除,使其看起来像您引用的代码。

    如果您的代码确实具有相对路径,那么您需要深入研究一下。某处某处使浏览器认为对www.asking1.com 内容的请求来自asking1.com

    【讨论】:

    • 但这只是一个问题,如果 OP 正在为 $.get 调用设置绝对路径,而他们正在设置相对路径,在这种情况下,实际域永远不会除非有 .htaccess 文件重定向请求,否则会有所不同。
    • @Gavin:是的——假设引用的代码是准确的(遗憾的是,我经常看到代码被编辑以使其更短以消除错误)。无论如何,错误消息很清楚这是一个 SOP 问题。
    【解决方案3】:

    我是这样做的:

    $.get("http://<?php echo $_SERVER['HTTP_HOST']; ?>/_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { (...)
    

    你们是最棒的。谢谢。

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      相关资源
      最近更新 更多