我正在使用$.ajax
进行跨域请求。它可以在Firefox和Chrome上运行,但在IE 7或8上不能发出调用。有人能告诉我以下问题出在哪里吗?
由于一些自定义的restrictions).
了
代码:
$.ajax({
type: 'GET',
url: "http://anotherdomain.com/Service/GetControl?id=" + zoneID,
cache: false,
contentType: "application/x-www-form-urlencoded",
async: false,
beforeSend: function (request) {
//alert('before send');
//request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
//request.setRequestHeader("X-PINGOTHER", "pingpong");
} ,
success: function (data, status) {
//alert("Data returned :" + data);
//alert("Status :" + status);
if (status == "success" && data != "")
$("#" + div.id).append(data);
else
$("#" + div.id).attr("style", "display:none;");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
我已经在多个网站上尝试了各种技巧,但还没有成功。
发布于 2010-08-01 15:14:50
你能检查IE的问题是否依赖于没有定义安全区域来允许跨域请求吗?See this microsoft page解释。
this page提到,IE7和早期版本不能进行跨域调用,但IE8可以使用与XMLHttpRequest不同的对象,即JQuery使用的对象。你能检查一下XDomainRequest是否正常工作吗?
编辑(2013-08-22)
第二个链接是死的,所以我在这里写一些它的信息,取自wayback machine
支持的
XDomainRequest : IE8
IE团队没有实现CORS版本的XMLHttpRequest,而是使用了自己的专有对象,名为XDomainRequest。通过抛出更多的事件( onload可能是最重要的),XMLHttpRequest简化了XDomainRequest的使用。
这个实现有一些附加的限制。例如,使用此对象时不会发送cookie,这对于服务器端基于cookie的会话来说可能是一个令人头疼的问题。此外,不能设置ContentType,这在ASP.NET和其他服务器端语言(请参阅http://www.actionmonitor.co.uk/NewsItem.aspx?id=5)中造成了问题。
var xdr =新函数();xdr.onload =函数(){XDomainRequest(“READY”);};xdr.open("GET","script.html");xdr.send();
发布于 2012-06-30 03:37:32
对于IE8和IE9,您需要使用XDomainRequest (XDR)。如果你看下面,你会发现它的格式类似于$.ajax。就我的研究而言,我不能在IE6 &7中实现这种跨域工作(仍然在寻找解决这个问题的方法)。XDR最早是在IE8中出现的(它也是在IE9中)。因此,基本上首先,我测试6/7,并且不执行AJAX。
IE10+能够像所有其他浏览器一样进行跨域操作(恭喜微软...叹息)
在那之后,else if在窗口中测试'XDomainRequest (显然比浏览器嗅探更好),并以这种方式执行JSON AJAX请求,否则ELSE将正常使用$.ajax。
希望这能有所帮助!!我花了很长时间才弄明白这一切
Information on the XDomainRequest object
// call with your url (with parameters)
// 2nd param is your callback function (which will be passed the json DATA back)
crossDomainAjax('http://www.somecrossdomaincall.com/?blah=123', function (data) {
// success logic
});
function crossDomainAjax (url, successCallback) {
// IE8 & 9 only Cross domain JSON GET request
if ('XDomainRequest' in window && window.XDomainRequest !== null) {
var xdr = new XDomainRequest(); // Use Microsoft XDR
xdr.open('get', url);
xdr.onload = function () {
var dom = new ActiveXObject('Microsoft.XMLDOM'),
JSON = $.parseJSON(xdr.responseText);
dom.async = false;
if (JSON == null || typeof (JSON) == 'undefined') {
JSON = $.parseJSON(data.firstChild.textContent);
}
successCallback(JSON); // internal function
};
xdr.onerror = function() {
_result = false;
};
xdr.send();
}
// IE7 and lower can't do cross domain
else if (navigator.userAgent.indexOf('MSIE') != -1 &&
parseInt(navigator.userAgent.match(/MSIE ([\d.]+)/)[1], 10) < 8) {
return false;
}
// Do normal jQuery AJAX for everything else
else {
$.ajax({
url: url,
cache: false,
dataType: 'json',
type: 'GET',
async: false, // must be set to false
success: function (data, success) {
successCallback(data);
}
});
}
}
发布于 2012-07-17 15:14:42
Jquery为你做到了这一点,唯一要做的就是设置$.support.cors = true;
,然后跨域请求对于jquery用户来说在所有浏览器中都能很好地工作。
https://stackoverflow.com/questions/3362474
复制相似问题