我有一个关于 Prototype 在 IE 浏览器 < 10 时处理 CORS 的问题。我注意到在 IE9 中对跨源 URL 的 Ajax.Request 调用会静默失败,检查服务器的访问日志很明显,该请求甚至从来没有制成。
经过一番阅读,似乎 IE8/9 必须使用自己的XDomainRequest
对象才能启用 CORS,但是 Prototype 的Ajax.getTransport
函数返回了XMLHttpRequest
我理解的对象在 IE8/9 中不允许 CORS?
我找到了针对同一问题的 jQuery 补丁,它告诉我这也可能是 Prototype 的问题,我只是找不到任何关于它的帖子。
我已经实现了一些 hacky 修复:
if (window.XDomainRequest) {
// Use Microsoft XDR for IE8 and IE9
var xdr = new XDomainRequest();
xdr.open('POST', url);
xdr.onload = function () {
var data = xdr.responseText.evalJSON();
callback_handler(data.domain);
};
setTimeout(function(){
xdr.send();
}, 0);
} else {
new Ajax.Request(url,
{
method: 'post',
onSuccess: function(response)
{
var data = response.responseText.evalJSON();
callback_handler(data.domain);
}
}
);
};
...但我想知道是否有人(或原型本身)有更好的解决方案?