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

为什么我会收到此错误?

4

5 回答 5

6

就我而言,问题是由于兼容模式造成的。我在 Intranet 中,并且 Internet Explorer 以兼容模式运行。我添加了以下标签,这解决了我所有的问题。它强制 IE 不使用兼容模式。

<meta http-equiv="X-UA-Compatible" content="IE=Edge" >
于 2013-01-10T08:10:30.493 回答
6

--- 2014 年 1 月 ---

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

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

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

于 2014-01-10T02:04:51.413 回答
2

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

由于同源策略,对子域的调用被视为不同的域。确保您正在设置 document.domain 以避免使用同源策略拒绝访问。

要使 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>

有了这个,您应该能够在您的子域之间进行对话。

希望有帮助!

于 2013-01-10T06:42:27.690 回答
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);
于 2015-06-28T20:54:59.607 回答
0

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

于 2014-04-11T15:09:50.763 回答