IE中的Ajax请求“拒绝访问”问题

8
我使用Ajax请求来检查网站的响应,如下所示:
$.ajax ({
    url: 'https://www.example.com',
    cache: false,
    success : function() {
        alert(new Date() - start)               
    }, 
}) 

在我的本地电脑上,所有浏览器都可以运行。但当我把它放到服务器上时,Chrome和Firefox可以正常运行,但IE8无法运行。

我收到了此错误信息:"Access is denied" jquery.min.js

为什么会出现这个错误?


3
不确定您要获取的确切URL,但1.请查看CORS。另外,如果您是HTTPS站点,并引用非HTTPS站点(尽管我看到您的示例URL具有HTTPS),则在技术上存在不安全性。我发现浏览器处理此类情况不一致,但这只是一条评论。 - Raekye
2
这段代码和你正在尝试请求的URL在同一个域上,对吗?你可能正在违反同源策略 - gen_Eric
1
你读过这篇文章吗?https://dev59.com/n0_Ta4cB1Zd3GeqPDbyy - William
1
从HTTP页面AJAX HTTPS页面被视为“跨域”请求,浏览器不允许这样做。您需要使用CORS(在IE8中不完全支持)或JSONP。 - gen_Eric
1
@user1874941:是的,我不确定为什么它在其他浏览器中可以工作,这不应该发生。一个解决方案是让页面也成为HTTPS。 - gen_Eric
显示剩余14条评论
5个回答

6

在我的情况下,问题是由于兼容模式引起的。我处于内部网络,并且Internet Explorer正在运行兼容模式。 我添加了以下标签,解决了所有问题。它强制IE不使用兼容模式。

<meta http-equiv="X-UA-Compatible" content="IE=Edge" >

1
尝试让ie10使用CORS,但出现了“错误访问被拒绝”的错误。原因是头部有一个meta标签,告诉浏览器以ie9兼容模式运行。 - James Harrington

6

2

引用另一个非常相似的问题中的“epascarello”的话:

由于同源策略,调用子域被视为不同的域。请确保您设置了document.domain以避免Same Origin策略导致的访问被拒绝。

要使document.domain同步,您需要在两个位置设置它。添加一个设置域的脚本标签,并且您需要在页面上添加一个iframe,在另一个域上设置相同的内容。

发出Ajax调用的页面是“www.example.com”,并调用“ajax.example.com”:

<script type="text/javascript">
    document.domain = "example.com";
</script>
<iframe src="http://ajax.example.com/domainCode.html"></iframe>

今日免费次数已满, 请开通会员/明日再来
<html>
    <head>
        <script type="text/javascript">
            document.domain = "example.com";
        </script>
    </head>
<body>
</body>
</html>

有了这个设置,您应该可以在子域之间交流。

希望这能帮到您!


1
请注意--在ajax中不要使用"http://www.domain.xxx"作为URL。只使用路径(目录)和页面名称而不包括地址。 错误状态:
var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir/getSecurityCode.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

真实状态:
var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'dir/getSecurityCode.php', true);   // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

0
我在IE8中遇到了这个问题。解决方法是将ajax请求与原始页面请求使用相同的协议,我的情况下原始页面是通过https请求的,而ajax请求使用http。将它们都改为使用https解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接