javascript - 为什么 jQuery 将 XHR 对象创建包装在 try/catch 中?

标签 javascript jquery ajax

如果我必须在没有 jQuery 的情况下编写自己的跨浏览器 AJAX 函数(我就是这么做的),我会这样做:

var getXHR = function() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    return new ActiveXObject('Microsoft.XMLHTTP');
  }
}

但是在深入研究 jQuery 的 source code 时,我注意到了这一点:

function createStandardXHR() {
  try {
    return new window.XMLHttpRequest();
  } catch( e ) {}
}
function createActiveXHR() {
  try {
    return new window.ActiveXObject( "Microsoft.XMLHTTP" );
  }
}

然后:

createStandardXHR() || createActiveXHR();

为什么 jQuery 开发人员只是直接在 try/catch block 内调用对象构造函数,而不是使用功能检测。我想象一个try/catch比简单的 if 检查慢。有什么好处?

最佳答案

你的方法很好。
读完代码后,我认为 jQuery 的开发人员使用了这个技巧来创建 Request 对象并测试 !this.isLocal &&/^(get|post|head|put|delete|options)$/i.test( this.type ) && 在一条语句中没有错误。

关于javascript - 为什么 jQuery 将 XHR 对象创建包装在 try/catch 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538786/

相关文章:

javascript - 使用 setInterval 更新按钮上的文本

php - 由于 echo 数组而没有 ajax 响应

表中的 JQuery 行不会在回调函数中删除

javascript - 如何在没有服务器组件的情况下使用 Angular-fullstack?

javascript - 使用 javascript 将 html 文本渲染为位图,无需服务器端代码

javascript - jQuery onClick 不适用于主要元素

javascript - 添加新模型后渲染

javascript - 将对象添加到数组

javascript - d3力定向布局中的神秘力量?

jquery - 如何模糊背景图像的 "repeated"部分?