在IE上拒绝访问jQuery脚本

Kyl*_*yle 46 javascript ajax jquery 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)
     }
 });
Run Code Online (Sandbox Code Playgroud)

Raf*_*fay 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)
                    }
            });

        }
Run Code Online (Sandbox Code Playgroud)

参考

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]); 
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到更多的指导


Kev*_*ary 9

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

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

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

  • 我想为阅读此内容的人添加:确保使用与原始呼叫相同的协议,即HTTP或HTTPS. (4认同)