How to create an object of XMLHttpRequest

兼容性问题是个大问题。昨天(20090621)跑到公司加班,但 Ajax 没反应,百思不得其解,早晨搜"Msxml2.XMLHTTP 和 Microsoft.XMLHTTP 区别"终于查到,下面是代码:

function xmlHttp() {
    xmlhttp = false;
    xmlhttpObj = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        for(i=0;i<xmlhttpObj.length;i++) {
            xmlhttp = new ActiveXObject(xmlhttpObj);
            if (xmlhttp) {
                break;
            }
        }
    } else {
        alert("暂时不能创建XMLHttpRequest对象");
    }
    return xmlhttp?xmlhttp:false;
}

注, 以上方法在公司的机器里并不奏效!

反而是下面的简单代码无敌:

function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}

另外公司原先还使用这样的方式:

else if ( window.ActiveXObject ) {
        try {
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            xhr = false;
        }
    }

参考:

  1. ie6不支持Microsoft.XmlHttp。。解决办法。。
  2. ActiveX不可用时,你的AJAX会出错么?