如果我必须在没有 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/