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();
複製代碼
相關文章
相關標籤/搜索