我有一个关于Prototype使用IE浏览器处理CORS的问题< 10.我注意到调用Ajax.Request到跨域URL会在IE9中无声地失败,检查服务器的访问日志,很明显甚至没有提出请求。
经过一些阅读后,似乎IE8 / 9必须使用自己的XDomainRequest
对象才能启用CORS,但是Prototype的Ajax.getTransport
函数返回{I}}对象,据我所知不允许IE8 / 9中的CORS?
I have found a patch for jQuery对于同一个问题,它告诉我这可能也是Prototype的一个问题,我找不到任何关于它的帖子。
我实施了一些hacky修复:
XMLHttpRequest
...但我想知道是否有人(或Prototype本身)有更好的解决方案?
答案 0 :(得分:0)
基于Ajax.getTransport方法的来源:
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
的填充。
var _getTransport = Ajax.getTransport;
Ajax.getTransport = function() {
return Try.these(
function() { return new XDomainRequest() },
_getTransport
) || false;
};
如果您在包含prototype之间插入此代码,并且首先使用Ajax.Request,它应尽可能无缝地使用XDR。
N.B。这是完全未经测试的,几乎肯定有一些边缘情况 - 我不确定XDR的行为是针对同域请求的。