![](/img/trans.png)
[英]jQuery .ajax getting Access Denied on Cross Domain Request in IE8/9
[英]Ajax request “Access is denied” in IE
我使用ajax请求来检查网站的响应如下,
$.ajax ({
url: 'https://www.example.com',
cache: false,
success : function() {
alert(new Date() - start)
},
})
它适用于所有浏览器的本地电脑。 当我把它放在服务器上时,它适用于Chrome和Firefox,但不适用于IE8。
我收到错误: "Access is denied" jquery.min.js
为什么我收到此错误?
对于我的情况,由于兼容模式导致问题。 我在Intranet和Internet Explorer运行兼容模式。 我添加了以下标签,这解决了我所有的问题。 它强制IE不使用兼容模式。
<meta http-equiv="X-UA-Compatible" content="IE=Edge" >
--- 2014年1月---
IE8和IE9使用不同的方法(XDomainRequest)与跨域通信。 如果他们使用jQuery,你应该考虑使用它:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
确保使用与始发呼叫相同的协议,即HTTP或HTTPS。
从另一个非常相似的问题引用“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>
有了这个,您应该能够在您的子域之间进行交谈。
希望有所帮助!
注 - 注意不要在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);
我在IE8中遇到了这个问题。 为我解决的是改变我的ajax请求以使用与原始页面请求相同的协议。 在我的情况下,原始页面是通过https请求的,而ajax请求是使用http。 将它们切换为使用https都可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.