【问题标题】:Cross-origin Ajax requests don't work in Opera and IE9?跨域 Ajax 请求在 Opera 和 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 中运行?

【问题讨论】:

    标签: javascript jquery ajax cors cross-domain


    【解决方案1】:
    【解决方案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
      猜你喜欢
      • 2023-03-17
      • 2014-04-18
      • 2013-06-22
      • 2012-08-17
      • 2011-12-24
      • 2016-01-29
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多