大家好,在开发中经常碰到一个问题,就是xmlhttp创建顺序问题,代码如下
if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
} else if(window.ActiveXObject){
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
for (var i = 0; i < prefixes.length; i++) {
try {
// try to create the objects
xmlHttp=new ActiveXObject(prefixes[i] + ".XmlHttp");
break;
}catch (ex) {
};
}
if(i==prefixes.length)throw new Error("Your browser does not support XmlHttp objects");
}
开发中测试的时候用一些浏览器就会出现问题,而把顺序换一下
if(window.ActiveXObject){
var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
for (var i = 0; i < prefixes.length; i++) {
try {
// try to create the objects
xmlHttp=new ActiveXObject(prefixes[i] + ".XmlHttp");
break;
}catch (ex) {
};
}
if(i==prefixes.length)throw new Error("Your browser does not support XmlHttp objects");
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
就可以解决。
想问一下为什么,在第一种情况下比如一个浏览器不支持XMLHttpRequest的话就不满足if条件,那应该转入else if去看是否匹配ActiveXObject,那应该什么浏览器都能创建成功啊,为什么还会出现浏览器不支持的问题,非要把创建顺序更换一下成第二种情况才能解决呢?
不知道描述的明不明白,希望高手解决,谢谢
[b]问题补充:[/b]
哈哈,应用起来当然是用框架,但是原理什么的还是要知道,要不光会用也没啥意思
我很多时候都是用的try cath,而不是if .else
[code="java"]
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
as = 1;
}catch(e){
try{
ajax = new ActiveXObject("Msxml2.XMLHTTP");
as = 1;
}catch(e){
try{
ajax = new XMLHttpRequest();
as = 2;
}catch(e){
ajax = null;
as = 0;
}
}
}
[/code]
用点框架吧,用这种方法太原始、太麻烦了,推荐使用jquery,创建xmlhttprequest已经给你封好了,并且不同浏览器间不会有冲突,想调ajax 只需要
$.post("url",function()); 就ok了,多简单