文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
.NET频道
 资讯动态   ASP.NET   C#   ADO.NET   VC.NET   VB.NET   .NET Framework   WebService
您现在的位置: IT文谷 >> 开发平台 >> .net framework >> WebService >> 文章正文
建一个XMLHttpRequest对象池建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池
建一个XMLHttpRequest对象池
建一个XMLHttpRequest对象池建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池
建一个XMLHttpRequest对象池建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池
  在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象,则使用此对象,否则将创建一个新的对象。
  下面是我最近写的一个简单的类:
  
  /**
   * 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;
   },
  
   // 发送请求(方法[post,get], 地址, 数据, 回调函数)
   sendReq: function (method, url, data, callback)
   {
   var objXMLHttp = this._getInstance();
  
   with(objXMLHttp)
   {
   try
   {
   // 加随机数防止缓存
   if (url.indexOf("?") > 0)
   {
   url += "&randnum=" + Math.random();
   }
   else
   {
   url += "?randnum=" + Math.random();
   }
  
   open(method, url, true);
  
   // 设定请求编码方式
   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);
   }
   }
   }
  };
  
  示例:
  <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>

建一个XMLHttpRequest对象池建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池
  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    32bit 和 64bit 的问题
    关于内存参数的调整
    Lock_sga = true 的问题
    9i下参数的变化
    SGA内参数设置
    SGA的大小
    内存管理简介
    Oracle的SGA调整经历
    oracle数据库的性能调整
    关于SGA设置的一点总结
    由于SGA大小在os上的限制导致数据库无法启动实例
    Oracle 10g RAC与SLES9
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 本站原创文章,转载时请注明出自文谷及作者姓名
    ③在本网BBS上发表言论者,文责自负。
    ④如您因版权等问题需要与本网联络,请在30日内联系 。
    建一个XMLHttpRequest对象池建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池
    建一个XMLHttpRequest对象池建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池2006-7-15 16:09:31建一个XMLHttpRequest对象池

    全站热点
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷论坛
    Tel: 0577-65690019      E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2008 wengu.com 文谷 All Rights Reserved
    浙ICP备05000327号