构建pool管理无刷新页面的xmlhttp对象

在页面上使用ActiveXObject的代价是很大的,如果我们的无刷新页面使用xmlhttp技术,我们或许需要频繁的建立xmlhttp对象,当然 我们也可以使用全局变量来cache一个xmlhttp对象实例。但是这样的方法适合于同步方式xmlhttp通信,而对于异步方式xmlhttp通信将 会出现问题。由于没有了进程的堵塞,用户可能再次调用同一个xmlhttp实例,如果这时前一个通信未完成,那么就失败了。

    建立一个pool来管理页面上的xmlhttp对象实例,最明显的好处就是不会再创建冗余对象,同时也不会出现多个操作在同一个工作的xmlhttp实例上被调用的情况。

    具体实现,我们使用一个Array作为pool来存储已创建的xmlhttp对象实例,然后每次调用从pool中去取一个实例。xmlhttp实例通讯完 毕后我们不用做任何处置,因为它自身的readyState属性可以标识出它是否可用,如果当时没有空闲的xmlhttp实例,且pool中的实例数小于 m_MaxPoolLength,那么就创建一个新的实例并放入pool中。pool的实现代码如下:
#region __XmlHttpPool__源码

var __XmlHttpPool__ =

{

    m_MaxPoolLength : 
10,

    m_XmlHttpPool : [],

    

    __requestObject : 
function()

    {

        
 xmlhttp  null;

        
 pool this.m_XmlHttpPool;

        
for (  i0 ; i < pool.length ; ++i )

        {

            
if ( pool[i].readyState ==4|| pool[i].readyState  )

            {

                xmlhttp 
 pool[i];

                
break;

            }

        }

        
 ( xmlhttp  )

        {

            
return.__extendPool();

        }

        
 xmlhttp;

    },

    

    __extendPool : 
.m_XmlHttpPool.length .m_MaxPoolLength )

        {

            
;

            
try

            {

                xmlhttp 
new ActiveXObject('MSXML2.XMLHTTP');

            }

            
catch(e)

            {

                

                {

                    xmlhttp 
 ActiveXObject('Microsoft.XMLHTTP');

                }

                
(e2) {}

            }

            
 ( xmlhttp )

            {

                
.m_XmlHttpPool.push(xmlhttp);

            }

            
 xmlhttp;

        }

    },

    

    GetRemoteData : 
(url, callback)

    {

        
.__receiveRemoteData(url, callback, 'GET', );

    },

    

    PostRemoteData : 

    {

        

    },

    

    __receiveRemoteData : 
.__requestObject();

        
!xmlhttp )

        {

            
;

        }

        xmlhttp.open(httpmethod, url,255);">true
);

        xmlhttp.onreadystatechange 
()

        {

            
 ( xmlhttp.readyState  xmlhttp.readyState  'complete' )

            {

                callback(xmlhttp.responseText);

            }

        };

        xmlhttp.send(data);

    }

};

 #endregion

    __XmlHttpPool__提供了两个方法来和服务器通信,一个使用'GET'方法,一个使用'POST'方法,使用它们非常简单, __XmlHttpPool__.GetRemoteData(url,callback)或__XmlHttpPool__.PostRemoteData(url,callback,data)。其中url是服务器地址,callback是处理返回数据(responseText)的回调函数。比如:
< scrip language ="javascript" >


__XmlHttpPool__.PostRemoteData(url, Render, 'abc');


function  Render(string)

{

    
if  ( string )

    {

        txbContent.value 
+=  string  +  '/r/n';

    }

}

</scirpt>

<
textarea rows="40
" style=width:100% id="txbContent"></textarea>
 

相关文章

$.AJAX()方法中的PROCESSDATA参数 在使用jQuery的$.ajax()方...
form表单提交的几种方式 表单提交方式一:直接利用form表单提...
文章浏览阅读1.3k次。AJAX的无刷新机制使得在注册系统中对于...
文章浏览阅读1.2k次。 本文将解释如何使用AJAX和JSON分析器在...
文章浏览阅读2.2k次。/************************** 创建XML...
文章浏览阅读3.7k次。在ajax应用中,通常一个页面要同时发送...