zoukankan      html  css  js  c++  java
  • 用js创建XMLHttpRequest对象池[转]

    //使用literal语法定义一个对象:XMLHttp   
    var XMLHttp =    
    {   
        //定义第一个属性,该属性用于缓存XMLHttpRequest对象的数组   
        XMLHttpRequestPool: [],   
        //对象的第一个方法,该方法用于返回一个XMLHttpRequest对象   
        getInstance:function()   
        {   
           // 从XMLHttpRequest对象池中取出一个空闲的XMLHttpRequest   
            for (var i = 0; i < this.XMLHttpRequestPool.length; i ++)   
            {   
               //如果XMLHttpReuqest的readyState为0,或者为4,   
                //都表示当前的XMLHttpRequest对象为闲置的对象   
                if (this.XMLHttpRequestPool[i].readyState == 0 ||    
                    this.XMLHttpRequestPool[i].readyState == 4)   
                {   
                    return this.XMLHttpRequestPool[i];   
               }   
            }   
           //如果没有空闲的,将再次创建一个新的XMLHttpRequest对象   
            this.XMLHttpRequestPool[this.XMLHttpRequestPool.length]    
                = this.createXMLHttpRequest();   
            //返回刚刚创建的XMLHttpRequest对象   
            return this.XMLHttpRequestPool[this.XMLHttpRequestPool.length - 1];   
       },   
        //创建新的XMLHttpRequest对象   
       createXMLHttpRequest:function()   
       {   
           //对于DOM 2 规范的浏览器   
           if (window.XMLHttpRequest)   
            {   
               var objXMLHttp = new XMLHttpRequest();   
            }   
            //对于Internet Explorer浏览器   
          else  
            {   
               //将Internet Explorer内置的所有XMLHTTP ActiveX控制设置成数组   
                var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',    
                    'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];   
                //依次对Internet Explorer内置的XMLHTTP控件初始化,尝试创建XMLHttpRequest对象   
                for(var n = 0; n < MSXML.length; n ++)   
                {   
                   try  
                    {   
                        //如果可以正常创建XMLHttpRequest对象,使用break跳出循环   
                        var objXMLHttp = new ActiveXObject(MSXML[n]);    
                       break;   
                    }   
                   catch(e)   
                    {   
                    }   
                }   
            }   
           //Mozilla某些版本没有readyState属性   
            if (objXMLHttp.readyState == null)   
            {   
               //直接设置其readyState为0   
               objXMLHttp.readyState = 0;   
                //对于哪些没有readyState属性的浏览器,将load动作与下面的函数关联起来   
                objXMLHttp.addEventListener("load", function ()   
                {   
                    //当从服务器加载数据完成后,将readyState状态设为4   
                   objXMLHttp.readyState = 4;   
                   if (typeof objXMLHttp.onreadystatechange == "function")   
                   {   
                        objXMLHttp.onreadystatechange();   
                   }   
                }, false);   
            }   
            return objXMLHttp;   
       },   
        //定义对象的第三个方法: 发送请求(方法[POST,GET], 地址, 数据, 回调函数)   
        sendRequest: function (method, url, data, callback)   
        {   
            var objXMLHttp = this.getInstance();   
            with(objXMLHttp)   
            {   
                try  
                {   
                   //增加一个额外的randnum请求参数,用于防止IE缓存服务器响应   
                    if (url.indexOf("?") > 0)   
                    {   
                        url += "&randnum=" + Math.random();   
                    }   
                    else  
                    {   
                        url += "?randnum=" + Math.random();   
                    }   
                   //打开与服务器的连接   
                    open(method, url, true);   
                    //对于使用POST请求方式   
                    if (method == "POST")   
                    {   
                        // 设定请求头   
                       setRequestHeader('Content-Type',    
                            'application/x-www-form-urlencoded');   
                       send(data);   
                    }   
                   //对于采用GET请求   
                    if (method == "GET")   
                    {   
                       send(null);   
                    }   
                    //设置状态改变的回调函数   
                    onreadystatechange = function ()   
                   {   
                       //当服务器的相应完成时,以及获得了正常的服务器响应   
                       if (objXMLHttp.readyState == 4 &&   
                           (objXMLHttp.status == 200 ||    
                               objXMLHttp.status == 304))   
                       {   
                           //当响应时机成熟时,调用回调函数处理响应   
                            callback(objXMLHttp);   
                       }   
                    }   
               }   
               catch(e)   
                {   
                    alert(e);   
                }   
           }   
        }   
    }; 

    网上转过来, 当是笔记

  • 相关阅读:
    vue app项目 第一天 基本架构和路由配置
    uni-app真机调试报错request:fail abort解决方法
    C#中的虚函数virtual
    ASP.NET Core中返回 json 数据首字母大小写问题
    ASP.NET Core中使用Cache缓存
    ASP.NET Core WebApi使用ActionFilterAttribute过滤器
    ASP.NET Core WebApi使用JWT认证
    微信小程序自动识别收货地址
    开发常用网站
    微信小程序自定义导航栏组件
  • 原文地址:https://www.cnblogs.com/whtydn/p/3173588.html
Copyright © 2011-2022 走看看