【问题标题】:How to determine whether to use XMLHttpRequest or XDomainRequest?如何确定是使用 XMLHttpRequest 还是 XDomainRequest?
【发布时间】:2013-03-05 19:19:43
【问题描述】:

取决于浏览器,我想确定应该使用哪个对象。对于 IE XDomainRequest,其余的是 XMLHttpRequest

if(window.XDomainRequest) //basically 'if IE'
    //XDomainRequest
else
    //XMLHttpRequest

由于IE10支持跨域资源共享,最好使用XMLHttpRequest对象。此代码将无法正常工作(我想 IE10 仍然支持XDomainRequest,如果我弄错了请纠正我,我无法测试它)。直接检查浏览器并不是最安全的判断方式。所以我的问题是,确定应该使用哪个对象的最佳方法是什么?我正在寻找纯 JS(非 jQuery)的解决方案。

【问题讨论】:

  • 尝试使用 XMLHttpRequest,如果失败,例如在 try/catch 中使用 XdomainRequest。但是有一个问题,您是否向其他域发送请求?
  • 是的,这就是为什么我不能使用你的想法 - IEXMLHttpRequest 对象,但它不能用于请求外国域。
  • 那么这对您有帮助吗? stackoverflow.com/questions/1641507/…
  • 是的,大概就是这样,非常感谢!我说可能,因为我无法测试 'withCredentials' in new XMLHttpRequest() 在 IE10 中是否为 true,但它应该是。尽管这可能有点“不稳定”的解决方案——“Chrome 2 未能通过此测试 [尽管它确实支持跨域请求]”。
  • 如果我是你,我不应该为 chrome 2 烦恼,因为今天的版本是 25.. 我已经测试过: ('withCredentials' in new XMLHttpRequest()) 在 IE10 中评估为 true。

标签: javascript xmlhttprequest


【解决方案1】:

这就是我的做法,但它并不好。

var useXDR = window.XDomainRequest && (window.XMLHttpRequest && new XMLHttpRequest().responseType === undefined);

它之所以有效,是因为 IE10 有一个新创建的 XHR 的空字符串 responseType,但在不支持 XHR2 的 IE 版本中,它是未定义的。

如果您确实走这条路,请记住,XDR 比 XHR 更难调试 - 它在出现问题时为您提供的信息更少,而且某些即使在旧 XmlHttpRequest 实现上运行良好的功能也无法正常工作全部在 XDR 上。

即使您的浏览器不支持 XHR2 并且支持 XDR,当您从与加载页面的主机/端口相同的主机/端口请求 url 时,您仍然希望使用 XHR。

【讨论】:

  • 这个答案应该被接受。为什么它至少在现在之前没有被投票?
猜你喜欢
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 2016-02-16
  • 2011-03-01
  • 1970-01-01
  • 2017-01-15
  • 2020-10-21
相关资源
最近更新 更多