以下仅作为个人笔记用,如有不妥,谢谢指出。
引言:XMLHttpRequest对象是AJax技术的核心,个人觉得掌握XMLHttpRequest对象的创建对于学习AJax是必要的。下面介绍我所知道的关于XMLHttpRequest对象创建时的注意点和它的3种创建方式:
借用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<span style="font-family: Arial, Helvetica, sans-serif;">");</span>
} 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
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;
}