这是挺久之前的笔记,忘记是从哪位大牛笔记里面copy的了!
引言:
XMLHttpRequest对象是AJax技术的核心,掌握XMLHttpRequest对象的创建对于学习AJax是必要的。下面介绍我所知道的关于XMLHttpRequest对象创建时的注意点和它的3种创建方式:
借用W3CSchool上的原话:“所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象”,所以这些对于这些浏览器可以直接通过 new XMLHttpRequest()的方式获取到XMLHttpRequest对象。对于IE5、6等老版本浏览器,使用 ActiveX 对象来创建: new ActiveXObject("Microsoft.XMLHTTP");
借用W3CSchool上的原话:“所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象”,所以这些对于这些浏览器可以直接通过 new XMLHttpRequest()的方式获取到XMLHttpRequest对象。对于IE5、6等老版本浏览器,使用 ActiveX 对象来创建: new ActiveXObject("Microsoft.XMLHTTP");
第一种:
通过嵌套多个try-catch确定浏览器的不同,并以此创建对应的XMLHttpRequest对象。代码如下:
function getXMLHttpRequest() {
var xmlHttpRequest;
try {//IE7+、Chrome、Firefox、Opera8.0+和Safari
xmlHttpRequest = new XMLHttpRequest();
} catch (e) {
try {//IE7+
xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {//IE5、6
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
return xmlHttpRequest;
}
这种创建方式适用于所有浏览器。
var xmlHttpRequest;
try {//IE7+、Chrome、Firefox、Opera8.0+和Safari
xmlHttpRequest = new XMLHttpRequest();
} catch (e) {
try {//IE7+
xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {//IE5、6
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
return xmlHttpRequest;
}
这种创建方式适用于所有浏览器。
第二种,
先判断window.ActiveXObject或window.XMLHttpRequest是否存在,然后再创建对应的XMLHttpRequest对象。代码如下:
function getXMLHttpRequest() {
var xmlHttpRequest;
if(window.ActiveXObject) {//IE8
xmlHttpRequest = new ActiveXObject("MSXML2.XMLHTTP.3.0");
} else if(window.XMLHttpRequest) {//其他浏览器如Firefox、Chrome等
xmlHttpRequest = new XMLHttpRequest();
}
return xmlHttpRequest;
}
这种方式貌似不适用于IE5、6
var xmlHttpRequest;
if(window.ActiveXObject) {//IE8
xmlHttpRequest = new ActiveXObject("MSXML2.XMLHTTP.3.0");
} else if(window.XMLHttpRequest) {//其他浏览器如Firefox、Chrome等
xmlHttpRequest = new XMLHttpRequest();
}
return xmlHttpRequest;
}
这种方式貌似不适用于IE5、6
第三种,
先判断window.XMLHttpRequest或window.ActiveXObjec是否存在,若window.XMLHttpRequest存在,通过new XMLHttpRequest()方式创建;否则,若window.ActiveXObjec存在,则表明当前浏览器为IE,再通过try-catch确定IE版本,通过new ActiveXObject("IE版本号")方式创建。代码如下:
function getXMLHttpRequest() {
var xmlHttpRequest = null;
if(window.XMLHttpRequest) {
xmlHttpRequest = new XMLHttpRequest();
} else {
if(window.ActiveXObject) {
try {//IE5、6
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {}
}
}
}
return xmlHttpRequest;
}
var xmlHttpRequest = null;
if(window.XMLHttpRequest) {
xmlHttpRequest = new XMLHttpRequest();
} else {
if(window.ActiveXObject) {
try {//IE5、6
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {}
}
}
}
return xmlHttpRequest;
}