天天看點

建構一個pool來管理無重新整理頁面的xmlhttp對象

    建立一個pool來管理頁面上的xmlhttp對象執行個體,最明顯的好處就是不會再建立備援對象,同時也不會出現多個操作在同一個工作的xmlhttp執行個體上被調用的情況。

具體實作,我們使用一個Array作為pool來存儲已建立的xmlhttp對象執行個體,然後每次調用從pool中去取一個執行個體。xmlhttp執行個體通訊完畢後我們不用做任何處置,因為它自身的readyState屬性可以辨別出它是否可用,如果當時沒有空閑的xmlhttp執行個體,且pool中的執行個體數小于m_MaxPoolLength,那麼就建立一個新的執行個體并放入pool中。pool的實作代碼如下:

建構一個pool來管理無重新整理頁面的xmlhttp對象

#region __XmlHttpPool__源碼

建構一個pool來管理無重新整理頁面的xmlhttp對象

var __XmlHttpPool__ =

建構一個pool來管理無重新整理頁面的xmlhttp對象

{

建構一個pool來管理無重新整理頁面的xmlhttp對象

    m_MaxPoolLength : 10,

建構一個pool來管理無重新整理頁面的xmlhttp對象

    m_XmlHttpPool : [],

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

    __requestObject : function()

建構一個pool來管理無重新整理頁面的xmlhttp對象

    {

建構一個pool來管理無重新整理頁面的xmlhttp對象

        var xmlhttp = null;

建構一個pool來管理無重新整理頁面的xmlhttp對象

        var pool = this.m_XmlHttpPool;

建構一個pool來管理無重新整理頁面的xmlhttp對象

        for ( var i=0 ; i < pool.length ; ++i )

建構一個pool來管理無重新整理頁面的xmlhttp對象

        {

建構一個pool來管理無重新整理頁面的xmlhttp對象

            if ( pool[i].readyState == 4 || pool[i].readyState == 0 )

建構一個pool來管理無重新整理頁面的xmlhttp對象

            {

建構一個pool來管理無重新整理頁面的xmlhttp對象

                xmlhttp = pool[i];

建構一個pool來管理無重新整理頁面的xmlhttp對象

                break;

建構一個pool來管理無重新整理頁面的xmlhttp對象

            }

建構一個pool來管理無重新整理頁面的xmlhttp對象

        }

建構一個pool來管理無重新整理頁面的xmlhttp對象

        if ( xmlhttp == null )

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            return this.__extendPool();

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        return xmlhttp;

建構一個pool來管理無重新整理頁面的xmlhttp對象

    },

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

    __extendPool : function()

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        if ( this.m_XmlHttpPool.length < this.m_MaxPoolLength )

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            var xmlhttp = null;

建構一個pool來管理無重新整理頁面的xmlhttp對象

            try

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

                xmlhttp = new ActiveXObject('MSXML2.XMLHTTP');

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            catch(e)

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

                try

建構一個pool來管理無重新整理頁面的xmlhttp對象

                {

建構一個pool來管理無重新整理頁面的xmlhttp對象

                    xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');

建構一個pool來管理無重新整理頁面的xmlhttp對象

                }

建構一個pool來管理無重新整理頁面的xmlhttp對象

                catch(e2) {}

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            if ( xmlhttp )

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

                this.m_XmlHttpPool.push(xmlhttp);

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            return xmlhttp;

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

    GetRemoteData : function(url, callback)

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        this.__receiveRemoteData(url, callback, 'GET', null);

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

    PostRemoteData : function(url, callback, data)

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        this.__receiveRemoteData(url, callback, 'POST', data);

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

    __receiveRemoteData : function(url, callback, httpmethod, data)

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        var xmlhttp = this.__requestObject();

建構一個pool來管理無重新整理頁面的xmlhttp對象

        if ( !xmlhttp )

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            return null;

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        xmlhttp.open(httpmethod, url, true);

建構一個pool來管理無重新整理頁面的xmlhttp對象

        xmlhttp.onreadystatechange = function()

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

            if ( xmlhttp.readyState == 4 || xmlhttp.readyState == 'complete' )

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

                callback(xmlhttp.responseText);

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        };

建構一個pool來管理無重新整理頁面的xmlhttp對象

        xmlhttp.send(data);

建構一個pool來管理無重新整理頁面的xmlhttp對象

    }

建構一個pool來管理無重新整理頁面的xmlhttp對象

};

 #endregion

__XmlHttpPool__提供了兩個方法來和伺服器通信,一個使用'GET'方法,一個使用'POST'方法,使用它們非常簡單,__XmlHttpPool__.GetRemoteData(url,

callback)或__XmlHttpPool__.PostRemoteData(url, callback,

data)。其中url是伺服器位址,callback是處理傳回資料(responseText)的回調函數。比如:

建構一個pool來管理無重新整理頁面的xmlhttp對象

<script language="javascript">

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

__XmlHttpPool__.PostRemoteData(url, Render, 'abc');

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

function Render(string)

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

    if ( string )

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

        txbContent.value += string + '\r\n';

建構一個pool來管理無重新整理頁面的xmlhttp對象
建構一個pool來管理無重新整理頁面的xmlhttp對象

}

建構一個pool來管理無重新整理頁面的xmlhttp對象

</scirpt>

建構一個pool來管理無重新整理頁面的xmlhttp對象

<textarea rows="40" style="width:100%" id="txbContent"></textarea>

本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。

繼續閱讀