Javascript 请求不';IE8/9中不能与CORS一起工作,默默地失败

Javascript 请求不';IE8/9中不能与CORS一起工作,默默地失败,javascript,xmlhttprequest,internet-explorer-9,prototypejs,xdomainrequest,Javascript,Xmlhttprequest,Internet Explorer 9,Prototypejs,Xdomainrequest,我有一个关于Prototype在IE浏览器

我有一个关于Prototype在IE浏览器<10的情况下处理CORS的问题。我注意到,在IE9中,对Ajax.Request的调用会以静默方式失败,检查服务器的访问日志很明显,甚至从未发出请求

经过一些阅读,IE8/9似乎必须使用自己的
XDomainRequest
对象才能启用CORS,然而Prototype的
Ajax.getTransport
函数返回
XMLHttpRequest
对象,我知道IE8/9中不允许CORS

对于同一个问题,它告诉我这可能也是原型的问题,我只是找不到任何关于它的帖子

我已经实现了一个黑客修复程序:

…但我想知道是否有人(或原型本身)有更好的解决方案?

基于该方法的来源:

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  }
}
您可以看到,
getTransport
将尝试返回列出的每个传输的新实例。因此,您可以实现预先添加
XDomainRequest
的polyfill

var _getTransport = Ajax.getTransport;
Ajax.getTransport = function() {
    return Try.these(
        function() { return new XDomainRequest() },
        _getTransport
    ) || false;
};
如果您在包含prototype和首先使用Ajax.Request之间插入这段代码,它应该尽可能无缝地使用XDR


N.B.这是完全未经测试的,几乎肯定有一些边缘情况-我不确定XDR的行为对于相同的域请求是什么。

这里有一个合并的拉请求,有助于使CORS请求工作。它不在1.7.1版本中,但您可以从github repo进行构建,也可以使用这个非官方的构建!但是,该请求似乎解决了所有浏览器中Prototype和CORS的问题,但没有解决IE8/9问题,IE8/9问题特别涉及那些版本中无法处理跨域请求的
XMLHttpRequest
对象,而Prototype似乎并不能解释这一点。你的权利——我会看看我是否能得到一个一起处理
XDomainRequest
对象的请求。
var _getTransport = Ajax.getTransport;
Ajax.getTransport = function() {
    return Try.these(
        function() { return new XDomainRequest() },
        _getTransport
    ) || false;
};