XMLHttpRequest对象,也就是Ajax交互的核心对象。
这里列举三种创建Ajax对象的方法。
第一种:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="author" content="manfredHu">
<meta name="website" content="http://www.cnblogs.com/manfredHu/">
</head>
<body>
<script type="text/javascript">
//IE8-中创建XHR对象的第一种方法
function getXHR() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else {
window.XMLHttpRequest = function() {
try {
return new ActiveXObject("Msxml2.XMLHTTP.6.0");
} catch (e1) {
try {
return new ActiveXObject("Msxml2.XMLHTTP.3.0");
} catch (e2) {
throw new Error("XMLHttpRequest is not supported");
}
}
}
}
}
var XHR = getXHR();
console.log(XHR);
</script>
</body>
</html>
第一种第一个是判断window.XMLHttpRequest对象是否存在,存在则返回。不存在则检测IE浏览器的ActiveObject各个版本的不同对象。总的来说这种写法try和catch嵌套很多。看着有点晕
第二种:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="author" content="manfredHu">
<meta name="website" content="http://www.cnblogs.com/manfredHu/">
</head>
<body>
<script type="text/javascript">
//IE8-中创建XHR对象的第二种方法
function getxhr() {
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
console.log(xmlhttp);
}
var XHR = getxhr();
console.log(XHR);
</script>
</body>
</html>
第二种方法是W3School上面的方法,看起来很简洁,但是没有版本检测。在IE6下可以正常运行!低版本IE5-没有测过不知道,但是也是不推荐的写法。新版本跟老版本的IE在不同版本对XHR对象的处理不太一样,项目中还是推荐要写入版本号。
第三种:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examples</title>
<meta name="author" content="manfredHu">
<meta name="website" content="http://www.cnblogs.com/manfredHu/">
</head>
<body>
<script type="text/javascript">
//IE8-中创建XHR对象的第三种方法
function createXHR() {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest(); //IE7+和其他浏览器支持的
} else if (typeof ActiveXObject != "undefined") { //IE7-支持的
if (typeof arguments.callee.activeXString != "string") {
var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
i, len;
for (i = 0, len = versions.length; i < len; i++) {
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (e) {
}
}
}
return new ActiveXObject(arguments.callee.activeXString); //返回ActiveXObject对象
} else { //全部不支持,抛出错误
throw new Error("don‘t support XMLHttpRequest");
}
}
var XHR = createXHR();
console.log(XHR);
</script>
</body>
</html>
第三种是来自Professional JavaScript for Web中文名《JavaScript高级程序设计(第3版)》这本书然后经过自己修改理解得到的。首先判断有没有支持XMLHttpRequest对象,有得话直接返回。然后检测ActiveObject对象是否存在。创建了一个由高到低的版本号序列,并且循环创建,如果有错误则跳过错误创建低级的版本。这种写法是比较推荐的,逻辑比较清晰。而且没有像第一种那样用N个try和catch嵌套创建,而是通过数组和for循环创建。大师果然写的代码就是不一样,很严谨和扩展性很好的代码写法。
原文:http://www.cnblogs.com/manfredHu/p/4593810.html