首页 > web前端 > js教程 > 正文

有关XMLHttpRequest对象

一个新手
发布: 2017-09-20 10:09:30
原创
1396 人浏览过


要使用XHR对象,需要编写一个函数。
登录后复制

方法一:

优点简洁,在大部分IE版本上都能运行,但是没有版本检测,不知道低版本的情况还行不行。

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

方法二

来自书《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();
登录后复制

方法三

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

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

   哇!觉得惰性函数是真的好玩!
登录后复制
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();
登录后复制

以上是有关XMLHttpRequest对象的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板