`
oceanG_Y
  • 浏览: 51458 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

XMLHttpRequest对象池

    博客分类:
  • Java
阅读更多

在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 
0 this . _objPool . length ++)
        {
            if (
this . _objPool [ i ]. readyState  ==  ||  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 
0 MSXML . length ++)
            {
                
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  ==  && ( 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> 

源代码里有中文的注释,是ansi的,如果你的网站或ie下选择编码为UTF-8,可能会导致错误,你把你ie的编码改成gb2312看看,或者去掉文件里的中文注释

分享到:
评论

相关推荐

    用js创建XMLHttpRequest对象池

    为了优化这一过程,我们可以考虑创建一个XMLHttpRequest对象池,复用这些对象而不是每次请求都新建。 首先,理解XMLHttpRequest的基本工作原理至关重要。当一个XHR对象被创建时,它会占用一定的系统资源,包括内存...

    建一个XMLHttpRequest对象池

    在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest 对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建...

    ajax 对象池,一个页面多个XMLHttpRequest对象

    ajax XMLHttpRequest。。。。。。

    javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象

    为了解决这个问题,我们可以构建一个XMLHttpRequest对象池,合理地复用这些对象,从而提高应用程序的效率。 对象池是一种设计模式,用于管理一组可重用的对象,避免了反复创建和销毁对象的开销。在JavaScript中,...

    Ajax使用总结

    当涉及到大量并发请求时,XMLHttpRequest对象池的概念就变得重要了。浏览器会限制同一时刻可以发起的并发请求数量,以防止资源耗尽。对象池就是预先创建并缓存一定数量的XMLHttpRequest实例,当需要发送请求时,可以...

    ajax对象池

    `说明.txt`文件可能是对Ajax对象池实现的详细解释或者使用指南,包括如何初始化对象池,如何从池中获取和归还Ajax对象,以及如何配置对象池的大小和回收策略等。通常,对象池的大小需要根据应用的实际需求进行调整,...

    一页面多XMLHttpRequest对象

    ### 一页面多XMLHttpRequest对象知识点详解 #### 1. XMLHttpRequest与Ajax技术 - **XMLHttpRequest简介**:`XMLHttpRequest`是一种内置的JavaScript对象,它允许网页向服务器发送异步请求并处理响应,无需重新加载...

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

    在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一...

    十分钟打造AutoComplete自动完成效果代码

    .老生常谈—XmlHttpRequest 代码 代码如下: var xmlHttp; function createXmlHttpRequest() { if... } } 如果不用Jquery手写javascript,上面要改成XmlHttpRequest对象池,这就不写了。 .触发AutoComplete函数 代码

    ajax实现注册验证+数据库连接池

    2. **Ajax请求**:利用JavaScript的XMLHttpRequest对象或者更现代的Fetch API,向服务器发送异步请求,携带用户名作为参数。 3. **服务器处理**:后端接收到请求,查询数据库中是否有相同的用户名。 4. **响应反馈**...

    基于ASP的网b爬虫程序.zip

    在ASP环境下,开发者可能使用XMLHttpRequest对象或者第三方库来模拟HTTP请求,获取网页内容,然后通过正则表达式或DOM解析技术提取所需信息,并将数据存储到数据库或文件中。 【ASP中的HTTP请求】在ASP中,可以使用...

    [removed]以前写的xmlhttp池,代码

    1. **定义Pool类**:通过定义一个Pool类,我们可以创建一个XHR对象池。这个类中包含一些方法来管理XHR对象的创建、获取和重用。 2. **构造函数**:在Pool类的构造函数中,我们需要初始化一个数组`_cacheCase`,用于...

    一个简单dwr的使用例子,tomcat数据库连接池

    DWR允许JavaScript在用户的浏览器中直接调用服务器端的Java方法,这通过XMLHttpRequest对象实现了异步通信。DWR提供了一个自动化处理这些请求和响应的框架,减少了开发者处理低级Ajax细节的工作量。 在本示例中,...

    Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器

    `proxyPool` 属性是一个对象池,用于存储创建的XMLHttpRequest或XDomainRequest实例。`length`方法用于计算池中的对象数量,通过遍历池中的属性并减去1(因为属性`length`自身也计算在内)。 2. **索引和异步设置*...

    完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx

    它的核心在于利用JavaScript创建XMLHttpRequest对象,通过这个对象,可以在后台与服务器进行通信,无需刷新整个页面就能获取或发送数据。这一特性显著提升了用户体验,减少了服务器的负载,因为只需要传输必要的信息...

Global site tag (gtag.js) - Google Analytics