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

时间:2012-12-12 15:30:49

标签: javascript ajax jquery

我使用ajax请求来检查网站的响应,如下所示

$.ajax ({
    url: 'https://www.example.com',
    cache: false,
    success : function() {
        alert(new Date() - start)               
    }, 
}) 

它适用于所有浏览器的本地电脑。当我把它放在服务器上时,它适用于Chrome和Firefox,但不适用于IE8。

我收到错误:"Access is denied" jquery.min.js

为什么我收到此错误?

5 个答案:

答案 0 :(得分:5)

--- 2014年1月---

IE8和IE9使用不同的方法(XDomainRequest)与跨域通信。 如果他们使用jQuery,你应该考虑使用它:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

确保使用与始发呼叫相同的协议,即HTTP或HTTPS。

答案 1 :(得分:4)

对于我的情况,问题是由于兼容模式造成的。我在Intranet和Internet Explorer运行兼容模式。 我添加了以下标签,这解决了我所有的问题。它迫使IE不使用兼容模式。

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

答案 2 :(得分: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>

“domainCode.html”只包含脚本标记

<html>
    <head>
        <script type="text/javascript">
            document.domain = "example.com";
        </script>
    </head>
<body>
</body>
</html>

有了这个,您应该可以在子域之间进行交谈。

希望有所帮助!

答案 3 :(得分:1)

注意 - 注意 不要使用&#34; http://www.domain.xxx&#34;用于ajax中的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);

答案 4 :(得分:0)

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