主頁 > 知識庫 > 建一個XMLHttpRequest對象池

建一個XMLHttpRequest對象池

熱門標簽:遼寧銀行智能外呼系統(tǒng) 澳大利亞城市地圖標注 上海浦東騰訊地圖標注位置 電銷機器人違法了嗎 姜堰電銷機器人 海南銀行智能外呼系統(tǒng)商家 遼寧正規(guī)電銷機器人 許昌智能電銷機器人公司 辰溪地圖標注
作者:legend
出處:http://www.ugia.cn/?p=85
在ajax應(yīng)用中,通常一個頁面要同時發(fā)送多個請求,如果只有一個XMLHttpRequest對象,前面的請求還未完成,后面的就會把前面的覆蓋掉,如果每次都創(chuàng)建一個新的XMLHttpRequest對象,也會造成浪費。解決的辦法就是創(chuàng)建一個XMLHttpRequset的對象池,如果池里有空閑的對象,則使用此對象,否則將創(chuàng)建一個新的對象。
下面是我最近寫的一個簡單的類:
復(fù)制代碼 代碼如下:

/**
* XMLHttpRequest Object Pool
*
* @author    legend legendsky@hotmail.com>
* @link      http://www.ugia.cn/?p=85
* @Copyright www.ugia.cn
*/ 

var XMLHttp = {
    _objPool: [],

    _getInstance: function ()
    {
        for (var i = 0; i  this._objPool.length; i ++)
        {
            if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4)
            {
                return this._objPool[i];
            }
        }

        // IE5中不支持push方法
        this._objPool[this._objPool.length] = this._createObj();

        return this._objPool[this._objPool.length - 1];
    },

    _createObj: function ()
    {
        if (window.XMLHttpRequest)
        {
            var objXMLHttp = new XMLHttpRequest();

        }
        else
        {
            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
                {
                    var objXMLHttp = new ActiveXObject(MSXML[n]);
                    break;
                }
                catch(e)
                {
                }
            }
         }          

        // mozilla某些版本沒有readyState屬性
        if (objXMLHttp.readyState == null)
        {
            objXMLHttp.readyState = 0;

            objXMLHttp.addEventListener("load", function ()
                {
                    objXMLHttp.readyState = 4;

                    if (typeof objXMLHttp.onreadystatechange == "function")
                    {
                        objXMLHttp.onreadystatechange();
                    }
                },  false);
        }

        return objXMLHttp;
    },

    // 發(fā)送請求(方法[post,get], 地址, 數(shù)據(jù), 回調(diào)函數(shù))
    sendReq: function (method, url, data, callback)
    {
        var objXMLHttp = this._getInstance();

        with(objXMLHttp)
        {
            try
            {
                // 加隨機數(shù)防止緩存
                if (url.indexOf("?") > 0)
                {
                    url += "randnum=" + Math.random();
                }
                else
                {
                    url += "?randnum=" + Math.random();
                }

                open(method, url, true);

                // 設(shè)定請求編碼方式
                setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
                send(data);
                onreadystatechange = function ()
                {
                    if (objXMLHttp.readyState == 4  (objXMLHttp.status == 200 || objXMLHttp.status == 304))
                    {
                        callback(objXMLHttp);
                    }
                }
            }
            catch(e)
            {
                alert(e);
            }
        }
    }
};  


示例: 
復(fù)制代碼 代碼如下:

script type="text/javascript" src="xmlhttp.js">/script>
script type="text/javascript">
function test(obj)
{
    alert(obj.statusText);
}

XMLHttp.sendReq('GET', 'http://www.ugia.cn/wp-data/test.htm', '', test);
XMLHttp.sendReq('GET', 'http://www.ugia.cn/wp-data/test.htm', '', test);
XMLHttp.sendReq('GET', 'http://www.ugia.cn/wp-data/test.htm', '', test);
XMLHttp.sendReq('GET', 'http://www.ugia.cn/wp-data/test.htm', '', test);

alert('Pool length:' + XMLHttp._objPool.length);
/script>  
您可能感興趣的文章:
  • CocosCreator如何實現(xiàn)劃過的位置顯示紋理
  • 整理CocosCreator常用知識點
  • 全面講解CocosCreator熱更新
  • CocosCreator經(jīng)典入門項目之flappybird
  • CocosCreator通用框架設(shè)計之網(wǎng)絡(luò)
  • 如何用CocosCreator實現(xiàn)射擊小游戲
  • Java基于Semaphore構(gòu)建阻塞對象池
  • 深度剖析C++對象池自動回收技術(shù)實現(xiàn)
  • java設(shè)計模式之實現(xiàn)對象池模式示例分享
  • 如何使用CocosCreator對象池

標簽:伊春 銅川 撫州 崇左 威海 晉城 深圳 西藏

巨人網(wǎng)絡(luò)通訊聲明:本文標題《建一個XMLHttpRequest對象池》,本文關(guān)鍵詞  建,一個,XMLHttpRequest,對象,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《建一個XMLHttpRequest對象池》相關(guān)的同類信息!
  • 本頁收集關(guān)于建一個XMLHttpRequest對象池的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章