$ .get - 不允许来源

时间:2012-07-26 13:57:34

标签: jquery ajax macos google-chrome

今天我尝试使用$.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.

3 个答案:

答案 0 :(得分:2)

您的回答在错误消息中:

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.

http://www.asking1.comhttp://asking1.com属于不同的来源,因此这与同源政策相悖。请参阅第六个示例here

如果您的代码确实是带引号的,并且不应该发生相关的URL,因为从错误消息中文档位于http://asking1.com,因此相对路径将解析为http://askign1.com/_x_fc.php ,这没关系。

如果您的代码中有绝对路径,那就是您的问题。只需删除它就像你引用的代码一样。

如果你的代码确实有相对路径,那么你需要深入研究一下。在某个地方,某些东西让浏览器认为www.asking1.com内容的请求来自asking1.com

答案 1 :(得分:2)

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 :(得分:0)

我这样做了:

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

你们是最好的。谢谢。