`
oceanG_Y
  • 浏览: 49980 次
  • 性别: 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对象池

    NULL 博文链接:https://justsee.iteye.com/blog/690353

    建一个XMLHttpRequest对象池

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

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

    ajax XMLHttpRequest。。。。。。

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

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

    Ajax使用总结

    XMLHttpRequest对象池和innerHTML中JS解析代码 博文链接:https://dabao.iteye.com/blog/64577

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

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

    自己封装的Ajax类

    2、创建XMLHttpRequest兼容主流浏览器,采用连接池管理方式,连接池大小可设置,初始为20. 3、封装了访问Ajax和WebService的API。WebService兼容SOAP1.1和SOAP1.2 4、该资源为作者本人劳动成果。使用方式可以参考另...

    J2EE应用开发详解

    91 6.2 CSS 92 6.3 XSLT 94 6.4 小结 96 第7章 Ajax简介 97 7.1 Ajax简介 97 7.2 Ajax技术核心 100 7.2.1 XMLHttpRequest对象的常用方法 100 7.2.2 标准的XMLHttpRequest属性 101 7.3 一个简单的Ajax实例 101 7.4 小...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置Struts开发...

    李兴华Java Web开发实战经典(高清版) Part2

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

    java web 视频、电子书、源码(李兴华老师出版)

    14.2、XMLHttpRequest对象 14.3、第一个AJAX程序 14.4、异步验证 14.5、返回XML数据 14.6、本章摘要 14.7、开发实战讲解(基于Oracle数据库) 第15章 Struts基础开发 15.1、Struts简介 15.2、配置...

Global site tag (gtag.js) - Google Analytics