跨域 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 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

IE9版本号下面ajax 跨域问题解决

IE9下JQuery发送ajax请求失效

填个小坑,Vue不支持IE8及以下,跨域ajax不支持IE9

如何让ajaxfileupload.js支持IE9,IE10,并可以传递多个参数

Ajax跨域:jsonp还是CORS

解决IE8IE9不支持发送CORS跨域请求