jQuery 不像您建议的那样在 Internet Explorer 中偏爱 ActiveX 而不是 XMLHttpRequest。相反,它检查它的存在,然后继续检查文件 a 是否是本地文件。如果不满足其中任何一个条件,则会发出标准 XHR 请求。
jQuery.ajaxSettings.xhr = window.ActiveXObject
// If ActiveXObject exists, and the file is not local, return Standard XHR
// If ActiveXObject exists, and the file is local, return ActiveXHR
? function() {
return !this.isLocal && createStandardXHR() || createActiveXHR(); }
// If ActiveXObject doesn't exist, use StandardXHR
: createStandardXHR;
同样的事情几乎可以这样写:
jQuery.ajaxSettings.xhr = (window.ActiveXObject && this.isLocal)
? createActiveXHR()
: createStandardXHR();
希望这更容易理解。
我应该注意到这在 jQuery 2.0 中发生了巨大的变化:
jQuery.ajaxSettings.xhr = function() {
try {
return new XMLHttpRequest();
} catch( e ) {}
};