一个实用的Ajax类

/*一个Ajax类*/
//创建一个XMLHttpRequest对象实例
var Ajax = function()
{
    this.pool = new Array();//声明一个二维数组,做为XMLHttpRequest对象池
    this.createXMLHttpRequest = function()
    {
        var objXMLHttp;
        if(window.XMLHttpRequest)//火狐
            objXMLHttp = new XMLHttpRequest();
        else
        {//IE
            var MSXML = ['MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
            for(var n = 0; n <MSXML.length;n++)
            {
                try
                {
                    objXMLHttp = new ActiveXObject(MSXML[n]);
                    break;
                }
                catch(e)
                {
                }
            }
        }
        return objXMLHttp;
    }
    this.getXMLHttpRequest = function(mark /*XMLHttpRequest标识*/)
    {
        if(mark != null)
        {
            for(var i =0;i< this.pool.length; i++)
            {
                if(this.pool[i]["mark"] == mark)
                {//判断标识
                    if(this.pool["obj"].readState == 0 || this.pool[a]["obj"].readState == 4)
                    {//判断XMLHttpRequest的当前状态,0对象已建立,但末初始化,4完成
                        return this.pool[a]["obj"];
                    }
                    else
                    {
                        return "wait";
                    }
                }
            }
            //没有相应mark标识的XMLHttpRequest对象,创建一个新的对象
            this.pool[this.pool.length] = new Array();
            this.pool[this.pool.length-1]["obj"] = this.createXMLHttpRequest();
            this.pool[this.pool.length -1]["mark"] = mark;
            return this.pool[this.pool.length -1]["obj"];
        }
        for (var i = 0; i < this.pool.length; i++)
           {//mark 为NULL
              if(this.pool[i]["obj"].readyState == 0 || this.pool[i]["obj"].readyState == 4)
              {
                return this.pool[i]["obj"];
              }
           }
 
       this.pool[this.pool.length] = new Array();
       this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
       this.pool[this.pool.length - 1]["mark"] = "";
       return this.pool[this.pool.length - 1]["obj"];
    }
    this.sendReq = function(method,url,data,callback,mark,callbackError,extra)
    {//成功返回调用callback(ojbXMLHttp),失败返回调用callbackError(objXMLHttp,[extra])
        var objXMLHttp = getXMLHttpRequest(mark);
        if(typeof(objXMLHttp)!= "object")
            return false;
        with(objXMLHttp)
        {
            try//加入随机数防止缓存
            {
                if(url.indexOf("?")>0)
                {
                    url += "&randnum=" + Math.random();
                }
                else
                {
                    url += "?randnum=" + Math.random();
                }
                open(method,url,true);//true异步,false同步
                setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
                //设定请求编码方式
                setRequestHeader("If-Modified-Since",0);//no cache
                if(data != null)
                    send(data);
                onreadstatechange = function()
                {
                    if(readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304))
                    {//status:304,Not Modified 200,OK
                        callback(objXMLHttp);
                    }
                    else
                    {//失败
                        if(typeof(callbackError) == "function")
                        {
                            if(extra != null)
                                callbackError(objXMLHttp,extra);
                            else
                                callbackError(objXMLHttp);
                        }
                    }
                }
           
            }
            catch(e)
            {
                alert(e);
            }
        }
    }
}
                   
posted @ 2007-04-21 21:36  少雄  阅读(361)  评论(0)    收藏  举报