在IE上拒绝访问jQuery脚本

时间:2011-02-23 06:04:36

标签: javascript jquery ajax internet-explorer

我有一个使用jQuery 1.4.2脚本的iframe。相同的iframe会注入httphttps个网站。 jQuery脚本作为相对路径包含在主HTML文件中(例如/scripts/jquery-1.4.2.min.js)。

进行AJAX调用时,Internet Explorer拒绝访问。 AJAX正在调用另一个子域,但它正在使用正确的协议。所有其他浏览器都可以工作,但Internet Explorer会出现以下错误:

  

SCRIPT5:访问被拒绝   jquery-1.4.2.min.js,第127行字符344

我听说这个错误来自跨域AJAX调用。但为什么IE是唯一一个给我废话的人呢?有IE解决方案吗?

另外,这是我的AJAX:

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

9 个答案:

答案 0 :(得分: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 :(得分:9)

这为我优雅地解决了这个问题:

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

只需在jQuery之后和脚本之前安装/编译并像往常一样使用$ .ajax方法,其余的将自动处理。

答案 2 :(得分:4)

您是否尝试使用最新的JQuery(&gt; jquery-1.8.0)?从版本1.8.0开始,他们解决了一些IE9的错误。也许这也是。

http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/

答案 3 :(得分:2)

检查您正在访问的域,响应头应该在那里

"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"

它可以帮助你。

答案 4 :(得分:2)

我有类似的问题,我的解决方案是使用jsonp而不是json。这样我就不必为IE推出客户版本了。

如果json服务器主机支持回调请求变量,或者您可以访问服务器并且可以添加支持,则只能执行此操作。这是一个帮助我理解这个过程的页面。它的.net mvc集中了,但它可以很好地了解json和jsonp之间的差异。

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

答案 5 :(得分:2)

我遇到了类似的问题。 我正在使用文件上传控件,但它被隐藏了,我有另一个元素试图控制文件上传和事件以ajax方式上传文件

尝试直接使用文件上传控件。这解决了我的申请中的问题。

答案 6 :(得分:2)

我得到了这个错误(因此谷歌在这里),但原因是非常不同的。因此,如果您没有跨站点并仍然获得此访问被拒绝错误:请仔细检查发送的 假设您使用以下不良表达式影响其中一个变量:

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

[...] ajax电话:

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

谷歌/ FF对此没有任何问题(检查接收服务器端是什么......)但IE拒绝发送此消息!

答案 7 :(得分:0)

似乎MS正在找到自己的做事方式,而不是采用行业建议。我在这里找到了解决方案:
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js

答案 8 :(得分:0)

只需添加&#39; callback =?&#39;在你的ajax URL请求上,如下所示: http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html