网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > XML&Web > 建一个XMLHttpRequest对象池  

建一个XMLHttpRequest对象池

2006-05-25  作者:bitsCN整理  来源:Chinaitlab收集整理  点评 投稿 收藏

  在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];
网管联盟bitsCN_com

   }
   }
  
   // 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)
   {
   }
   }
   }
   中国网管联盟bitsCN.com
   // 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)
网管联盟bitsCN_com

   {
   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> 网管下载dl.bitscn.com
  <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>

TAGs   对象   一个   function   var   if   objXMLHttp   this._objPool      
 上一篇:使用GDI+提高gif图片的保存画质   下一篇:用XML签名和加密更安全交换数据
相关文章列表
建一个XMLHttpRequest对象池 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
1.学好基本功之熟练调用 Web Service
2.XML Web Service完全实例解析
3.Acegi安全系统的配置
4.Xml WebService完全实例解析(2)
5.Xml WebService完全实例解析(1)
6.Javascript调用Webservice的汇集
7.异步WebService调用
8.用C#与XML创建动态分层菜单
9.关于webservice的异步调用实例
10.Xml WebService完全实例解析(3)
最新推荐文章:
1.关于Debug和Release之本质区别的讨论
2.客户端访问Web Service方法的一个细节
3.如何让WebServer返回指的定XML内容
4.如何用XML保存配置设定
5.使用 XML 通过 Java 类定义 Web服务
6.XML文件读取数据绑定到DropDownList
7.WebService中使用自定义类的解决方法
8.Web Service 中的身份验证策略
9.如何使用XmlSerializer类控制串行化
10.XML Web services 基础结构
网管论坛交流:
·不疯魔不成活
·令你大开眼界的真正标准化机房,已整理重
·华为HCSE OSPF路由协议培训教材 V3.0
·为赈灾,女孩舍身拍“裸照”
·Windows Server 2003服务器群集创建和配
·exchange2k3全套官方资料
·双儿一周岁了。。。特殊的礼物来啦。。
·存储备份技术版块守则
·无盘技术交流区守则
·DOS命令基础大全之命令详解<作者吐血