【发布时间】:2012-07-14 07:00:09
【问题描述】:
更新:我强烈建议不要在 XDomainRequest 上投入任何时间,因为它是一个非常糟糕的实现,有很多限制。它基本上只适用于对非 ssl 服务器的 GET 请求,因此您不妨使用 jsonp 或其他。
我正在使用 CORS 调用跨域 API,但 Internet Explorer 出现问题。通过 XDomainRequest 对象在 IE8 和 IE9 中应该可以使用 CORS,但是我无法正常工作..
JQuery refuses 为 XDomainRequest 提供本机支持,但是建议使用几个 jQuery 插件来添加此支持。这个topic 建议了两个这样的插件:jQuery.XDomainRequest.js 和xdr.js,据报道它们可以工作。 Afaik,插件应该自动覆盖jQuery.ajax 的行为。我找到了另一个插件here。
我放了一些演示页面,其中包含各自的插件 jQuery.XDomainRequest 和 xdr 和 jquery.ie.cors,它们对启用 CORS 的服务器执行 ajax 请求。这些页面在 Chrome 和 Firefox 中运行,但是 IE8/9 立即抛出权限被拒绝错误(甚至在发出请求之前)。这个MSDN post 建议添加另一个处理程序xhr.onprogress = function() {};,但我试过了,它也不起作用。
任何线索我做错了什么?我现在也使用 MS 虚拟服务器测试了 IE8,但它有完全相同的问题。
编辑:好的,所以我发现问题的一部分是我使用 POST over HTTPS。显然 XDomainRequest 不允许通过 HTTPS 进行 CORS。我可以切换到 HTTP,但我真的需要 POST。
Edit2:请参阅this issue on github 了解此故事的结尾。事实证明,当使用 HTTP POST 时,xDomainRequest 只能将请求正文(参数)编码为text/plain。这几乎使它毫无价值,因为每个人都使用application/x-www-form-urlencoded 或multipart/form-data。
【问题讨论】:
-
微软提供免费的 IE8 虚拟镜像,所以如果你有带宽就可以得到它。 (只是一个提示)
-
有一个简单的 hack/trick 可以让 jQuery CORS ajax 在 IE8 中工作......我想你可以通过搜索相关问题的答案在 StackOverflow 上找到它。
-
请在此处查看更新的自述文件以获取更多信息,包括一个有效的 jsFiddle 示例:github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/…
-
这个问题来自 2013 年! DIE IE8/9。
标签: jquery internet-explorer-9 xdomainrequest