建立一個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/,如需轉載請自行聯系原部落客。