AJAX 请求类

//使用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);   
            }   
        }   
    }   
};  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值