XMLHttpRequest对象深刻了解

IE7以前的版本不支持原生***XHR***对象

IE7以前的版本的XHR对象是经过MSXML库中的一个ActiveX对象实现的,这个MSXML库包括***MSXML2.XMLHttp,MSXML2.XMLHttp.3.0,MSXML2.XMLHttp.6.0***。javascript

IE7以前的版本建立XHR,实现函数以下:java

function creatXHR(){
    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{ //从最高版本开始建立,若是建立失败就catch,跳过,继续循环直到结束。
                new ActiveXObject(versions[i]);
                arguments.callee.activeXString = versions[i];
                break;
            }catch(ex){
                //跳过
            }
        }
       
       }
    return new ActiveXObject(arguments.callee.activeXString);
}
复制代码
IE7+,Firefox,Opera,Chrome,Safari。

以上的全部浏览器都支持原生的XHR对象,建立XHR对象以下:浏览器

ver XHR = new XMLHttpRequest();
复制代码
封装公用函数。
function createXHR(){
    if(typeof XMLHttpRequest != 'undefined'){ //浏览器支持XMLHttpRwquest对象
        return new XMLHttpRequest();
    }else if(typeof ActiveXObject != 'undefined'){ //IE7如下,拥有ActiveXObject对象
        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{
                    //跳过
                }
            }
        };
        return new ActiveXObject(arguments.callee.activeXString);
    }else{ //全部对象都不存在
        throw new Error("No XHR object available.")
    }
};

var XHR = createXHR();
复制代码
相关文章
相关标签/搜索