濮阳杆衣贸易有限公司

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

建一個XMLHttpRequest對象池

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

/**
* 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ù), 回調函數(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);

                // 設定請求編碼方式
                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);
            }
        }
    }
};  


示例: 
復制代碼 代碼如下:

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經典入門項目之flappybird
  • CocosCreator通用框架設計之網絡
  • 如何用CocosCreator實現(xiàn)射擊小游戲
  • Java基于Semaphore構建阻塞對象池
  • 深度剖析C++對象池自動回收技術實現(xiàn)
  • java設計模式之實現(xiàn)對象池模式示例分享
  • 如何使用CocosCreator對象池

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

巨人網絡通訊聲明:本文標題《建一個XMLHttpRequest對象池》,本文關鍵詞  建,一個,XMLHttpRequest,對象,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《建一個XMLHttpRequest對象池》相關的同類信息!
  • 本頁收集關于建一個XMLHttpRequest對象池的相關信息資訊供網民參考!
  • 推薦文章
    玛多县| 临沂市| 鸡泽县| 涟源市| 精河县| 广河县| 增城市| 乐清市| 峨山| 昭平县| 武汉市| 江阴市| 龙山县| 大厂| 十堰市| 云南省| 灵丘县| 漳平市| 蒙山县| 合阳县| 洛隆县| 儋州市| 台江县| 丹凤县| 法库县| 余干县| 新建县| 扎兰屯市| 卓资县| 顺义区| 油尖旺区| 祁连县| 正安县| 建阳市| 馆陶县| 石首市| 阿拉尔市| 丰台区| 瓦房店市| 滨海县| 通辽市|