2012-07-26 58 views
5

今天我在尝试使用$.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 
    }); 
} 
  • 它不是一个本地服务器,它与现有的域
  • 我并不想进行任何跨域Ajax的Web服务器。这两个文件都在同一个目录中。

我找不到任何解决方案。

确切错误:

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. 
+0

当你说它只发生在Mac OS X上时,你指的是客户端操作系统,对吧?这是你的Mac OS X测试和Windows测试中的同一台服务器吗? – 2012-07-26 14:01:18

+0

我知道这些是不同的浏览器,但在他们两个我的代码不起作用。我的服务器是基于Unix的,我只是在Windows和Mac OS X上进行测试。完全错误 - 请参阅编辑问题 – 2012-07-26 14:03:42

回答

0

我这样做是这样的:

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

你们是最好的。谢谢。

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

+0

但是,如果OP为'$ .get'调用设置绝对路径,那只会是一个问题,其中因为他们正在设置相对路径,在这种情况下,除非有一个.htaccess文件重定向请求,否则实际域永远不会有所不同。 – Gavin 2012-07-26 14:12:11

+0

@Gavin:True - 假设引用的代码是准确的(不幸的是,我经常看到编辑过的代码会缩短编辑出的错误)。无论如何,错误信息很明显是SOP。 – 2012-07-26 14:13:48

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请求的一部分,以确保它是同您的网址。

+0

我会试试看。 – 2012-07-26 14:33:44

相关问题