Javascript 拒绝访问IE上的jQuery脚本

Javascript 拒绝访问IE上的jQuery脚本,javascript,jquery,ajax,internet-explorer,Javascript,Jquery,Ajax,Internet Explorer,我有一个使用jQuery1.4.2脚本的iframe。相同的iframe被注入http和https站点。jQuery脚本作为相对路径包含在主HTML文件中(例如,/scripts/jQuery-1.4.2.min.js) 当发出AJAX调用时,Internet Explorer拒绝访问。AJAX正在调用另一个子域,但它使用的是正确的协议。所有其他浏览器均可工作,但Internet Explorer出现以下错误: 脚本5:访问被拒绝。 jquery-1.4.2.min.js,第127行,字符344

我有一个使用jQuery1.4.2脚本的iframe。相同的iframe被注入
http
https
站点。jQuery脚本作为相对路径包含在主HTML文件中(例如,/scripts/jQuery-1.4.2.min.js)

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

脚本5:访问被拒绝。
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)
     }
 });

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)
                    }
            });

        }
参考

不确定它是否适合您的场景


您可以找到更多的指南

检查您正在访问的域,应该有以下响应标题

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

它应该可以帮助您解决问题。

我也遇到了类似的问题,我的解决方案是使用jsonp而不是json。这样我就不必为IE发布客户版本

只有当json服务器主机支持回调请求变量,或者您可以访问服务器并添加支持时,才能执行此操作。这是一个帮助我理解过程的页面。它以.NETMVC为重点,但它很好地概括了json和jsonp之间的区别


您是否尝试使用最新的JQuery(>JQuery-1.8.0)?从1.8.0版开始,他们解决了IE9的一些bug。也许这个也是


我也面临着类似的问题。 我使用的是文件上传控制,但它是隐藏的,我有另一个元素试图控制文件上传和事件,以ajax方式上传文件


尝试直接使用文件上载控件。这个问题在我的应用程序中得到了解决。

微软似乎正在寻找自己的做事方式,而不是采纳行业建议。我在这里找到了解决方案:

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

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

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

我发现了这个错误(因此这里是google),但原因非常不同。因此,如果您没有跨站点,但仍然收到此拒绝访问错误:请再次检查发送的
假设您使用以下错误表达式影响其中一个变量:

urlVar = $("theID").val // without () this was the error!
[…]ajax调用:

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

Google/FF对此没有问题(检查什么是接收服务器端…),但IE拒绝发送

只需在ajax URL请求上添加“callback=?”,如下所示:

我将JQuery从版本1.10.1更改为1.10.2,它似乎已经为我解决了这个问题。

感谢您的解决方案和链接!不幸的是,我不知道如何使您的代码适合我的目的。你能帮忙吗?我在上面发布了ajax代码。具体地说,我想知道在browser.msie条件下,我如何传入json参数,以及在完成时如何使用返回数据调用回调。非常感谢!你到底是如何发送数据的?你能举一个发送两个参数的例子吗?@3nigma:如何在xdr请求中进行同步调用,就像我们在ajax中所做的那样(示例“async”:flase)。另外,对于那些使用php服务器端代码的人来说,这是一个很好的例子。。这是很有帮助的——对于跨域请求,您应该更喜欢
数据类型:“jsonp”
。@PippoFranco为什么?有同样的问题,我在IE9中激活了网络捕获,它甚至没有向服务器发出请求,因此,这可能无法解决问题。我想为阅读本文的任何人补充一点:确保使用与原始调用相同的协议,即HTTP或HTTPS。
data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},