转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
建一个XMLHttpRequest对象池         ★★★★

建一个XMLHttpRequest对象池

作者:闵涛 文章来源:闵涛的学习笔记 点击数:716 更新时间:2009/4/23 11:18:20
     在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>
  
    


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台