熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

建一個XMLHttpRequest對象池

2013-11-13 10:25:20  來源: .NET編程 
  在ajax應用中通常一個頁面要同時發送多個請求如果只有一個XMLHttpRequest對象前面的請求還未完成後面的就會把前面的覆蓋掉如果每次都創建一個新的XMLHttpRequest對象也會造成浪費解決的辦法就是創建一個XMLHttpRequset的對象池如果池裡有空閒的對象則使用此對象否則將創建一個新的對象
  下面是我最近寫的一個簡單的類
  
  /**
   * XMLHttpRequest Object Pool
   *
   * @author legend <l>
   * @link
   * @Copyright
   */
  
  var XMLHttp = {
   _objPool: []
  
   _getInstance: function ()
   {
   for (var i = ; i < this_objPoollength; i ++)
   {
   if (this_objPool[i]readyState == || this_objPool[i]readyState == )
   {
   return this_objPool[i];
   }
   }
  
   // IE中不支持push方法
   this_objPool[this_objPoollength] = this_createObj();
  
   return this_objPool[this_objPoollength ];
   }
  
   _createObj: function ()
   {
   if (windowXMLHttpRequest)
   {
   var objXMLHttp = new XMLHttpRequest();
  
   }
   else
   {
   var MSXML = [MSXMLXMLHTTP MSXMLXMLHTTP MSXMLXMLHTTP MSXMLXMLHTTP MicrosoftXMLHTTP];
   for(var n = ; n < MSXMLlength; n ++)
   {
   try
   {
   var objXMLHttp = new ActiveXObject(MSXML[n]);
   break;
   }
   catch(e)
   {
   }
   }
   }
  
   // mozilla某些版本沒有readyState屬性
   if (objXMLHttpreadyState == null)
   {
   objXMLHttpreadyState = ;
  
   objXMLHttpaddEventListener(load function ()
   {
   objXMLHttpreadyState = ;
  
   if (typeof objXMLHttponreadystatechange == function)
   {
   objXMLHttponreadystatechange();
   }
   } false);
   }
  
   return objXMLHttp;
   }
  
   // 發送請求(方法[postget] 地址 數據 回調函數)
   sendReq: function (method url data callback)
   {
   var objXMLHttp = this_getInstance();
  
   with(objXMLHttp)
   {
   try
   {
   // 加隨機數防止緩存
   if (urlindexOf(?) > )
   {
   url += &randnum= + Mathrandom();
   }
   else
   {
   url += ?randnum= + Mathrandom();
   }
  
   open(method url true);
  
   // 設定請求編碼方式
   setRequestHeader(ContentType application/xwwwformurlencoded; charset=UTF);
   send(data);
   onreadystatechange = function ()
   {
   if (objXMLHttpreadyState == && (objXMLHttpstatus == || objXMLHttpstatus == ))
   {
   callback(objXMLHttp);
   }
   }
   }
   catch(e)
   {
   alert(e);
   }
   }
   }
  };
  
  示例
  <script type=text/JavaScript src=xmlhttpjs></script>
  <script type=text/Javascript>
  function test(obj)
  {
   alert(objstatusText);
  }
  
  XMLHttpsendReq(GET test);
  XMLHttpsendReq(GET test);
  XMLHttpsendReq(GET test);
  XMLHttpsendReq(GET test);
  
  alert(Pool length: + XMLHttp_objPoollength);
  </script>

From:http://tw.wingwit.com/Article/program/net/201311/13569.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.