更新:我强烈建议不投资任何时间XDomainRequest,因为它是一个非常糟糕的实现有很大的局限性。 它基本上只有真正适用于GET请求非SSL服务器,所以你还不如用JSONP或什么的。
我使用CORS调用一个跨域API,但是Internet Explorer被给予的问题。 CORS应该在IE8和IE9可以通过XDomainRequest
对象,但我不能得到的东西的工作..
JQuery的拒绝为XDomainRequest提供原生支持,但也有一些jQuery插件都建议增加这一支持。 本课题提出两个这样的插件: jQuery.XDomainRequest.js和xdr.js ,已上报工作。 据我所知,该插件会自动覆盖的行为jQuery.ajax
。 我发现了另一个插件这里 。
我把与相应的插件有点演示页面jQuery.XDomainRequest和XDR和jquery.ie.cors执行AJAX请求启用CORS服务器。 该页面在Chrome和Firefox的工作,但IE8 / 9立即抛出一个权限被拒绝错误(甚至发出请求之前)。 此MSDN交建议增加另一个处理程序xhr.onprogress = function() {};
但我想这和它不工作要么。
任何线索我在做什么错? 我还与IE8现在使用MS虚拟服务器进行测试,但它有完全相同的问题。
编辑:行,所以我想通了,问题的一部分是,我是用POST通过HTTPS。 显然XDomainRequest不允许通过HTTPS CORS。 我可以切换到HTTP但我真的需要POST。
EDIT2:请参见GitHub上这个问题对于这个故事的结尾。 事实证明,使用HTTP POST的情况下,xDomainRequest只能编码请求主体(参数)作为text/plain
。 这几乎使毫无价值,因为每个人都使用application/x-www-form-urlencoded
或者multipart/form-data
。
支持POST方法,并进行跨域https://开头请您调用页面也需要加载通过https。 这是最好的文章中,我发现了详细解释XDomainRequest的这些和其他限制:
http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
我写了一个代理服务器,如果使用IE9或更低,这将优雅降级到代理。 您不必如果您正在使用ASP.NET做任何改动你的代码。
将该溶液分为两个部分。 第一个是一个jquery脚本挂钩到jQuery的AJAX处理。 它会自动调用Web服务器如果跨域请求时,浏览器是IE:
$.ajaxPrefilter(function (options, originalOptions, jqXhr) {
if (!window.CorsProxyUrl) {
window.CorsProxyUrl = '/corsproxy/';
}
// only proxy those requests
// that are marked as crossDomain requests.
if (!options.crossDomain) {
return;
}
if (getIeVersion() && getIeVersion() < 10) {
var url = options.url;
options.beforeSend = function (request) {
request.setRequestHeader("X-CorsProxy-Url", url);
};
options.url = window.CorsProxyUrl;
options.crossDomain = false;
}
});
在您的Web服务器,你必须接收请求,您可以通过值X-CorsProxy-Url
http头,做一个HTTP请求,最后返回结果。
我的博客文章: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/
对于CORS在IE8 / 9请求您可以使用jQuery插件jQuery的传输XDR