2011-02-23 50 views
45

我有一個使用jQuery 1.4.2腳本的iframe。將同一個iframe注入httphttps網站。 jQuery腳本作爲相對路徑包含在主HTML文件中(例如,/scripts/jquery-1.4.2.min.js)。訪問被拒絕jQuery腳本在IE上

當進行AJAX調用時,Internet Explorer拒絕訪問。 AJAX正在調用另一個子域,但它使用正確的協議。所有其他瀏覽器,但Internet Explorer中提供了以下錯誤:

SCRIPT5: Access is denied.
jquery-1.4.2.min.js, line 127 character 344

聽說這個錯誤是跨域AJAX調用。但爲什麼IE是唯一讓我廢話的人?有沒有IE解決方案?

此外,這是我的AJAX:

$.ajax({ 
    url: thisURL, 
    dataType: "json", 
    data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()}, 
    success: function(ret){ 
     callback(ret) 
    } 
}); 
+6

對於跨域請求,您應該更喜歡'dataType:「jsonp」'。 – 2012-09-12 09:16:52

+0

@PippoFranco爲什麼呢? – johni 2016-09-19 12:17:59

回答

44

IE要求您使用XDomainRequest而不是XHR跨站點,您可以嘗試像...

if ($.browser.msie && window.XDomainRequest) { 
      // Use Microsoft XDR 
      var xdr = new XDomainRequest(); 
      xdr.open("get", url); 
      xdr.onload = function() { 
       // XDomainRequest doesn't provide responseXml, so if you need it: 
       var dom = new ActiveXObject("Microsoft.XMLDOM"); 
       dom.async = false; 
       dom.loadXML(xdr.responseText); 
      }; 
      xdr.send(); 
     } else { 
      // your ajax request here 
      $$.ajax({ 
        url: thisURL, 
        dataType: "json", 
        data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()}, 
        success: function(ret){ 
           callback(ret) 
        } 
      }); 

     } 

參考

http://forum.jquery.com/topic/cross-domain-ajax-and-ie

不能確定它是否適合您的方案

xdr = new XDomainRequest(); 
xdr.onload=function() 
{ 
    alert(xdr.responseText); 
} 
xdr.open("GET", thisUrl); //thisURl ->your cross domain request URL 
//pass your data here 
xdr.send([data]); 

你可以找到一些指導here

+1

感謝您的解決方案和鏈接!不幸的是,我不知道如何適合您的代碼以達到我的目的。你能幫忙嗎?我發佈了上面的ajax代碼。具體來說,我想知道在browser.msie條件下,我如何傳入我的json參數,以及如何在完成時用返回數據調用回調。萬分感謝! – Kyle 2011-02-23 06:25:34

+0

感謝您的巨大幫助! – Kyle 2011-02-23 07:42:43

+0

很高興幫助... – Rafay 2011-02-23 08:01:20

1

檢查您正在訪問的域名,下面的響應頭應該有

"Access-Control-Allow-Methods" : "POST, GET, OPTIONS" 
"Access-Control-Allow-Origin" : "http://www.mydomain.com" or "*" 
其他

域應該允許你的腳本請求。 P3P標題將添加到您的回覆中。

"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT" 

它應該幫助你。

+1

具有相同的問題,我激活我的網絡捕獲在IE9中,它doesn甚至不向服務器發出請求,所以這可能無法解決問題。 – 2013-06-04 15:59:26

1

我有一個類似的問題,我的解決方案是使用jsonp而不是json。這樣我就不必爲IE打出一個客戶版本。

只有當json服務器主機支持回調請求變量或者您有權訪問服務器並可以添加支持時,才能執行此操作。這是一個幫助我理解過程的頁面。它的.net mvc集中,但它提供了一個很好的json和jsonp之間的區別。

http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

1

我正面臨類似的問題。 我正在使用文件上傳控制,但它被隱藏,我有另一個元素試圖控制文件上傳和事件以ajax方式上傳文件

嘗試直接使用文件上傳控制。這個問題在我的應用程序中解決

8

這解決了這個問題優雅對我來說:

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

只要安裝/ jQuery的之後,你的腳本之前編譯和正常使用$阿賈克斯方法,你會,其餘的都是自動處理的。

+4

我想爲任何閱讀此文的人添加:確保使用與始發呼叫相同的協議,即HTTP或HTTPS。 – 2014-01-10 02:19:15

1

我得到這個錯誤(因此谷歌在這裏),但原因是非常不同的。所以,如果你不具備跨站點,仍然可以得到這個拒絕訪問的錯誤:仔細檢查發送
讓我們說,你影響你一用不好下面的表達式變量:

urlVar = $("theID").val // without() this was the error! 

[。 ..]阿賈克斯電話:

data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()}, 

谷歌/法官沒有問題,這(檢查什麼是接收服務器端...)但IE拒絕發送這個!

1

我改變了我的JQuery從1.10.1版本1.10.2,它似乎已經解決了這個問題對我來說。

+0

它解決了我的問題.... – Mahendran 2016-03-28 07:26:58