我有一个使用jQuery 1.4.2脚本的iframe。相同的iframe会注入http
和https
个网站。 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)
}
});
答案 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的错误。也许这也是。
答案 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