更新:我强烈建议不要在 XDomainRequest 上投入任何时间,因为它是一个非常糟糕的实现,有很多限制。它基本上只适用于对非 SSL 服务器的 GET 请求,所以你不妨使用 jsonp 或其他什么。
我正在使用 CORS 调用跨域 API,但是 Internet Explorer 出现问题。通过对象在 IE8 和 IE9 中应该可以使用 CORS XDomainRequest
,但是我无法让事情正常工作..
JQuery拒绝为 XDomainRequest 提供本机支持,但是建议使用几个 jQuery 插件来添加此支持。本主题建议使用两个这样的插件:jQuery.XDomainRequest.js和xdr.js,据报道它们可以工作。Afaik,插件应该自动覆盖jQuery.ajax
. 我在这里找到了另一个插件。
我放了一些演示页面,其中包含对启用 CORS 的服务器执行 ajax 请求的相应插件jQuery.XDomainRequest和xdr和jquery.ie.cors 。这些页面在 Chrome 和 Firefox 中运行,但是 IE8/9 立即抛出权限被拒绝错误(甚至在发出请求之前)。这个MSDN 帖子建议添加另一个处理程序xhr.onprogress = function() {};
,但我尝试了这个,它也不起作用。
任何线索我做错了什么?我现在也使用 MS 虚拟服务器对 IE8 进行了测试,但它有完全相同的问题。
编辑:好的,所以我发现问题的一部分是我使用 POST over HTTPS。显然 XDomainRequest 不允许通过 HTTPS 进行 CORS。我可以切换到 HTTP,但我真的需要 POST。
Edit2:请参阅github上的此问题以了解此故事的结尾。事实证明,当使用 HTTP POST 时,xDomainRequest 只能将请求正文(参数)编码为text/plain
. 这几乎使它一文不值,因为每个人都使用application/x-www-form-urlencoded
or multipart/form-data
。