今天我尝试使用$.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
});
}
我找不到任何解决方案。
确切错误:
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 :(得分: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.com
和http://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) { (...)
你们是最好的。谢谢。