乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      博客園 - 鳥食軒 - 構(gòu)建一個(gè)pool來(lái)管理無(wú)刷新頁(yè)面的xmlhttp對(duì)象

       weicat 2006-03-23

      構(gòu)建一個(gè)pool來(lái)管理無(wú)刷新頁(yè)面的xmlhttp對(duì)象

          在頁(yè)面上使用ActiveXObject的代價(jià)是很大的,如果我們的無(wú)刷新頁(yè)面使用xmlhttp技術(shù),我們或許需要頻繁的建立xmlhttp對(duì)象,當(dāng)然我們也可以使用全局變量來(lái)cache一個(gè)xmlhttp對(duì)象實(shí)例。但是這樣的方法適合于同步方式xmlhttp通信,而對(duì)于異步方式xmlhttp通信將會(huì)出現(xiàn)問題。由于沒有了進(jìn)程的堵塞,用戶可能再次調(diào)用同一個(gè)xmlhttp實(shí)例,如果這時(shí)前一個(gè)通信未完成,那么就失敗了。

          建立一個(gè)pool來(lái)管理頁(yè)面上的xmlhttp對(duì)象實(shí)例,最明顯的好處就是不會(huì)再創(chuàng)建冗余對(duì)象,同時(shí)也不會(huì)出現(xiàn)多個(gè)操作在同一個(gè)工作的xmlhttp實(shí)例上被調(diào)用的情況。

          具體實(shí)現(xiàn),我們使用一個(gè)Array作為pool來(lái)存儲(chǔ)已創(chuàng)建的xmlhttp對(duì)象實(shí)例,然后每次調(diào)用從pool中去取一個(gè)實(shí)例。xmlhttp實(shí)例通訊完畢后我們不用做任何處置,因?yàn)樗陨淼膔eadyState屬性可以標(biāo)識(shí)出它是否可用,如果當(dāng)時(shí)沒有空閑的xmlhttp實(shí)例,且pool中的實(shí)例數(shù)小于m_MaxPoolLength,那么就創(chuàng)建一個(gè)新的實(shí)例并放入pool中。pool的實(shí)現(xiàn)代碼如下:

      #region __XmlHttpPool__源碼
      var __XmlHttpPool__ =
      {
          m_MaxPoolLength : 
      10,
          m_XmlHttpPool : [],
          
          __requestObject : 
      function()
          {
              
      var xmlhttp = null;
              
      var pool = this.m_XmlHttpPool;
              
      for ( var i=0 ; i < pool.length ; ++i )
              {
                  
      if ( pool[i].readyState == 4 || pool[i].readyState == 0 )
                  {
                      xmlhttp 
      = pool[i];
                      
      break;
                  }
              }
              
      if ( xmlhttp == null )
              {
                  
      return this.__extendPool();
              }
              
      return xmlhttp;
          },
          
          __extendPool : 
      function()
          {
              
      if ( this.m_XmlHttpPool.length < this.m_MaxPoolLength )
              {
                  
      var xmlhttp = null;
                  
      try
                  {
                      xmlhttp 
      = new ActiveXObject(‘MSXML2.XMLHTTP‘);
                  }
                  
      catch(e)
                  {
                      
      try
                      {
                          xmlhttp 
      = new ActiveXObject(‘Microsoft.XMLHTTP‘);
                      }
                      
      catch(e2) {}
                  }
                  
      if ( xmlhttp )
                  {
                      
      this.m_XmlHttpPool.push(xmlhttp);
                  }
                  
      return xmlhttp;
              }
          },
          
          GetRemoteData : 
      function(url, callback)
          {
              
      this.__receiveRemoteData(url, callback, ‘GET‘, null);
          },
          
          PostRemoteData : 
      function(url, callback, data)
          {
              
      this.__receiveRemoteData(url, callback, ‘POST‘, data);
          },
          
          __receiveRemoteData : 
      function(url, callback, httpmethod, data)
          {
              
      var xmlhttp = this.__requestObject();
              
      if ( !xmlhttp )
              {
                  
      return null;
              }
              xmlhttp.open(httpmethod, url, 
      true);
              xmlhttp.onreadystatechange 
      = function()
              {
                  
      if ( xmlhttp.readyState == 4 || xmlhttp.readyState == ‘complete‘ )
                  {
                      callback(xmlhttp.responseText);
                  }
              };
              xmlhttp.send(data);
          }
      };

       #endregion


          __XmlHttpPool__提供了兩個(gè)方法來(lái)和服務(wù)器通信,一個(gè)使用‘GET‘方法,一個(gè)使用‘POST‘方法,使用它們非常簡(jiǎn)單,__XmlHttpPool__.GetRemoteData(url, callback)或__XmlHttpPool__.PostRemoteData(url, callback, data)。其中url是服務(wù)器地址,callback是處理返回?cái)?shù)據(jù)(responseText)的回調(diào)函數(shù)。比如:

      <scriplanguage="javascript">
      __XmlHttpPool__.PostRemoteData(url, Render, ‘a(chǎn)bc‘);

      function Render(string)
      {
          
      if ( string )
          {
              txbContent.value 
      += string + ‘\r\n‘;
          }
      }
      </scirpt>
      <
      textarea rows="40" style="width:100%" id="txbContent"></textarea>

      posted on 2004-12-27 21:38 birdshome 閱讀(2517) 評(píng)論(8)  編輯 收藏 收藏至365Key 所屬分類: JScript&DHTML開發(fā)

      評(píng)論

      # re: 構(gòu)建一個(gè)pool來(lái)管理無(wú)刷新頁(yè)面的xmlhttp對(duì)象  回復(fù)   

      嗯 正好用上 收藏 Thx
      2004-12-28 09:35 | guoadou

      # re: 構(gòu)建一個(gè)pool來(lái)管理無(wú)刷新頁(yè)面的xmlhttp對(duì)象  回復(fù)   

      如果__XmlHttpPool__被用在彈出窗口中,在關(guān)閉窗口時(shí)為了避免出錯(cuò),應(yīng)該停止掉所有在運(yùn)行的實(shí)例,所以給pool增加了一個(gè)CancelAll的方法:
      CancelAll : function() 

          var extendPool 
      = this.__extendPool; 
          
      this.__extendPool = function() 
          

              
      return null
          }
       
          
      for ( var i=0 ; i < this.m_XmlHttpPool.length ; ++i ) 
          

              
      this.m_XmlHttpPool[i].abort(); 
          }
       
          
      this.__extendPool = extendPool; 
      }
       
      2005-01-17 14:11 | birdshome

      # re: 構(gòu)建一個(gè)pool來(lái)管理無(wú)刷新頁(yè)面的xmlhttp對(duì)象  回復(fù)   

      好,經(jīng)典。收藏
      2005-01-20 11:54 | daniel

      # 那個(gè)GetRemoteDataEx(url)在哪里?  回復(fù)   

      沒有看到啊,這個(gè)函數(shù)的定義在哪里?
      2005-04-01 09:50 | wearebug

      # re: 構(gòu)建一個(gè)pool來(lái)管理無(wú)刷新頁(yè)面的xmlhttp對(duì)象  回復(fù)   

      忘了更新這個(gè)文檔了
      GetRemoteDataEx : function(url)
      {
          
      return this.__receiveRemoteDataEx(url, ‘GET‘, null);
      },

      PostRemoteDataEx : 
      function(url, data)
      {
          
      return this.__receiveRemoteDataEx(url, ‘POST‘, data);
      },

      __receiveRemoteDataEx : 
      function(url, httpmethod, data)
      {
          
      var xmlhttp = this.__requestObject();
          
      if ( !xmlhttp )
          {
              
      return null;
          }
          if ( httpmethod == ‘POST‘ )
          {
              xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
          }
          xmlhttp.open(httpmethod, url, 
      false);
          
      try
          {
              xmlhttp.send(data);
          }
          
      catch(e)
          {
              
      __Debug__(e, data);
          }

          
      if ( xmlhttp.status == 200 )
          {
              
      return xmlhttp.responseText;
          }
          
      return ‘‘;
      },
      2005-04-01 10:12 | birdshome

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多