佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > 建一個(gè)XMLHttpRequest對象池

建一個(gè)XMLHttpRequest對象池

熱門標(biāo)簽:電子圍欄 科大訊飛語音識(shí)別系統(tǒng) 銀行業(yè)務(wù) 阿里云 Mysql連接數(shù)設(shè)置 服務(wù)器配置 Linux服務(wù)器 團(tuán)購網(wǎng)站
作者:legend
出處:http://www.ugia.cn/?p=85
在ajax應(yīng)用中,通常一個(gè)頁面要同時(shí)發(fā)送多個(gè)請求,如果只有一個(gè)XMLHttpRequest對象,前面的請求還未完成,后面的就會(huì)把前面的覆蓋掉,如果每次都創(chuàng)建一個(gè)新的XMLHttpRequest對象,也會(huì)造成浪費(fèi)。解決的辦法就是創(chuàng)建一個(gè)XMLHttpRequset的對象池,如果池里有空閑的對象,則使用此對象,否則將創(chuàng)建一個(gè)新的對象。
下面是我最近寫的一個(gè)簡單的類:
復(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
            {
                // 加隨機(jī)數(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如何實(shí)現(xiàn)劃過的位置顯示紋理
  • 整理CocosCreator常用知識(shí)點(diǎn)
  • 全面講解CocosCreator熱更新
  • CocosCreator經(jīng)典入門項(xiàng)目之flappybird
  • CocosCreator通用框架設(shè)計(jì)之網(wǎng)絡(luò)
  • 如何用CocosCreator實(shí)現(xiàn)射擊小游戲
  • Java基于Semaphore構(gòu)建阻塞對象池
  • 深度剖析C++對象池自動(dòng)回收技術(shù)實(shí)現(xiàn)
  • java設(shè)計(jì)模式之實(shí)現(xiàn)對象池模式示例分享
  • 如何使用CocosCreator對象池

標(biāo)簽:棗莊 衢州 廣元 衡水 江蘇 萍鄉(xiāng) 蚌埠 大理

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《建一個(gè)XMLHttpRequest對象池》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    观塘区| 昌邑市| 莲花县| 垦利县| 新昌县| 陇南市| 台山市| 浏阳市| 含山县| 陆良县| 惠州市| 深泽县| 沙湾县| 麻江县| 长兴县| 龙井市| 淮阳县| 井陉县| 霍山县| 福建省| 镇巴县| 环江| 广州市| 广汉市| 张家口市| 乌海市| 安国市| 金塔县| 城口县| 古浪县| 大竹县| 乌兰浩特市| 泽库县| 杨浦区| 化德县| 衡东县| 光山县| 缙云县| 奎屯市| 洛阳市| 合江县|