跨域 Ajax 请求在 Opera 和 IE9 中不起作用?
Posted
技术标签:
【中文标题】跨域 Ajax 请求在 Opera 和 IE9 中不起作用?【英文标题】:Cross-origin Ajax requests don't work in Opera and IE9? 【发布时间】:2011-10-20 08:11:35 【问题描述】:我正在使用此页面 - http://ecmazing.com/cors.html - 向此资源发出跨域 Ajax 请求:http://hacheck.tel.fer.hr/xml.pl
它适用于 Chrome、Safari 和 Firefox,但不适用于 IE9 和 Opera。
代码:
var pdata = 'textarea': 'test';
$.post('http://hacheck.tel.fer.hr/xml.pl', pdata, function(data, status, xhr)
output.value = xhr.responseText;
);
(预期结果是一个 XML 代码字符串。)
自己看看:http://ecmazing.com/cors.html
在 IE9 和 Opera 中,XHR 对象的error
处理程序执行并传入此错误对象:
readyState: 4,
status: 0,
statusText: 'error'
如您所见,这个错误对象并没有透露太多信息。
如何让它在 IE9 和 Opera 中运行?
【问题讨论】:
【参考方案1】:Here is a solution that works for IE.
【讨论】:
【参考方案2】:在尝试将 CORS 与 IE 和 jQuery 一起使用时,我感到非常沮丧,我写了一个 library 来消除最糟糕的部分。
是的,Microsoft 的现金和人力短缺使他们无法在短短七年内使浏览器正确兼容 CORS,但我仍然更喜欢 CORS 而不是 JSONP,坦率地说,这是一个破解。
【讨论】:
【参考方案3】:查看cors at whencaniuse 的条目。
对于 Internet Explorer,CORS 是“在 IE8 和 IE9 中使用 XDomainRequest 对象支持”,因此您需要使用备用对象来使用它。
Opera 根本不支持它。
如果你在 Opera 中需要跨域 Ajax,那就使用 JSON-P。
【讨论】:
好的,排除了 Opera。但我认为 jQuery 在内部使用了那个 XDomainRequest 对象……我去看看 jQuery 的源代码…… 不,XDomainRequest
在 jQuery 的源代码中没有提到。我猜,jQuery 目前还不支持 IE9 和 Opera 中的跨域 Ajax 请求...
JSON-P 不适用于 POST 或其他请求。
@Quentin 注意 IE8/9 XDomainRequest 不支持 cookie以上是关于跨域 Ajax 请求在 Opera 和 IE9 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
填个小坑,Vue不支持IE8及以下,跨域ajax不支持IE9