[英]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.