Heim  >  Artikel  >  Web-Frontend  >  Über das XMLHttpRequest-Objekt

Über das XMLHttpRequest-Objekt

一个新手
一个新手Original
2017-09-20 10:09:301336Durchsuche


要使用XHR对象,需要编写一个函数。

Methode 1:

Die Vorteile sind einfach und können auf den meisten IE-Versionen ausgeführt werden, aber es gibt keine Versionserkennung, daher ist es in Ordnung, wenn Sie dies nicht tun Kenne die niedrigere Version Nr.

var http_request; 
function creatXHR(){
            if(window.ActiveXObject){
                http_request=new ActiveXObject("Microsoft.XMLHTTP");
            }else{
                http_request=new XMLHttpRequest();
            }
}

Methode 2

来自书《JavaScript高级程序设计(第3版)》
首先检测原生XHR对象是否存在,如果存在就返回它的新实例。如果不存在就检测ActiveX对象。如果两种都不存在,就抛出错误。
关注if (typeof arguments.callee.activeXString != "string")这一句,如果有以前缓存的activeXString对象,下一次就不会执行if里面的东西。通过数组和for循环创建,很清晰,很严谨。
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("No XHR object available!");
        }
    }    var XHR = createXHR();

Methode 3

网上看见的方法,考虑惰性函数的优点,一次检测之后重写构造方法。
在方法二的基础上加入惰性函数,构成方法三。

   **惰性载入表示函数执行的分支只会在函数第一次掉用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。**

   哇!觉得惰性函数是真的好玩!
function createXHR() {
        if (typeof XMLHttpRequest != "undefined") {            //在第一次执行的时候重写createXHR函数
            createXHR = function() {
                return new XMLHttpRequest();
            };

        } else if (typeof ActiveXObject != "undefined") {

            createXHR = function() {
                if (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 (ex) {                            //跳过
                        }
                    }

                }                
                return new ActiveXObject(arguments.callee.activeXString);
            };

        } else {

            createXHR = function() {
                throw new Error("No XHR object available.");
            };

        }        
        return createXHR();
    }    
    var XHR = createXHR();

Das obige ist der detaillierte Inhalt vonÜber das XMLHttpRequest-Objekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn