登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

AJAX中同时发送多个请求XMLHttpRequest对象处理方法(javascript)  

2008-08-22 09:58:47|  分类: JS程式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转自:http://blog.csdn.net/lee576/archive/2008/01/07/2029445.aspx

在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>
  评论这张
 
阅读(637)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018