`
zendj
  • 浏览: 122141 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

阅读更多

构建一个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的实现代码如下:

__XmlHttpPool__源码#region__XmlHttpPool__源码
var__XmlHttpPool__=
{
m_MaxPoolLength:
10,
m_XmlHttpPool:[],

__requestObject :
function()
{
varxmlhttp=null;
varpool=this.m_XmlHttpPool;
for(vari=0;i<pool.length;++i)
{
if(pool[i].readyState==4||pool[i].readyState==0)
{
xmlhttp
=pool[i];
break;
}
}
if(xmlhttp==null)
{
returnthis.__extendPool();
}
returnxmlhttp;
},

__extendPool:
function()
{
if(this.m_XmlHttpPool.length<this.m_MaxPoolLength)
{
varxmlhttp=null;
try
{
xmlhttp
=newActiveXObject('MSXML2.XMLHTTP');
}
catch(e)
{
try
{
xmlhttp
=newActiveXObject('Microsoft.XMLHTTP');
}
catch(e2){}
}
if(xmlhttp)
{
this.m_XmlHttpPool.push(xmlhttp);
}
returnxmlhttp;
}
},

GetRemoteData:
function(url,callback)
{
this.__receiveRemoteData(url,callback,'GET',null);
},

PostRemoteData:
function(url,callback,data)
{
this.__receiveRemoteData(url,callback,'POST', data);
},

__receiveRemoteData:
function(url,callback,httpmethod,data)
{
varxmlhttp=this.__requestObject();
if(!xmlhttp)
{
returnnull;
}
xmlhttp.open(httpmethod,url,
true);
xmlhttp.onreadystatechange
=function()
{
if(xmlhttp.readyState==4||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)的回调函数。比如:

<scriptlanguage="javascript">
__XmlHttpPool__.PostRemoteData(url,Render,'abc');

functionRender(string)
{
if(string)
{
txbContent.value
+=string+'\r\n';
}
}
</scirpt>
<
textarearows="40"style="width:100%"id="txbContent"></textarea>

分享到:
评论

相关推荐

    XMLHTTP对象参考手册

    XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。 来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML...

    XmlHttp对象参考

    它在Web开发中扮演着至关重要的角色,尤其是在JavaScript和VBScript中,通过Ajax(Asynchronous JavaScript and XML)技术进行页面的无刷新更新时,XmlHttp对象是不可或缺的工具。 XmlHttp对象的核心功能在于它能够...

    《XMLHTTP对象参考手册》 CHM

    本参考手册详细介绍了XMLHTTP对象的各种属性、方法和事件,对于XML编程以及Web应用程序开发人员来说,是一个极其重要的参考资料。 XMLHTTP对象的核心功能在于其能够发起HTTP请求并接收响应,这在构建AJAX...

    XMLHTTP无刷新自动实时更新数据

    XMLHTTP无刷新自动实时更新数据是一种常见的Web应用程序技术,它利用了AJAX(Asynchronous JavaScript and XML)的核心组件——XMLHttpRequest对象,实现了网页在不重新加载整个页面的情况下,与服务器进行交互并...

    xmlhttp对象_VC中调用XMLHTTP对象访问

    首先定义了一个指向`IXMLHTTPRequest`接口的智能指针`xmlrequest`,然后使用`CreateInstance`方法创建一个`Msxml2.XMLHTTP`对象实例。 5. **设置请求参数并发送请求**: ```cpp xmlrequest-&gt;open(_bstr_t("GET")...

    一个创建xmlHttp对象的一个常用js脚本很牛逼哦

    一个创建xmlHttp对象的一个常用js脚本很牛逼哦。 对喜欢ajax的朋友很有帮助哦

    利用XMLHTTP无刷新添加数据之Post篇

    利用XMLHTTP无刷新添加数据之Post篇.chm利用XMLHTTP无刷新添加数据之Post篇.chm

    谈XMLHTTP对象(属性和方法)-VBA抓取网页数据[参考].pdf

    XMLHTTP 对象在 VBA 中抓取网页数据的应用 XMLHTTP 对象是 Microsoft 提供的一种客户端同 HTTP 服务器通讯的协议示例,它可以用来抓取网页数据。在 VBA 中,我们可以使用 XMLHTTP 对象来发送请求到 HTTP 服务器,并...

    xmlHttp对象参考.chmxmlHttp对象参考.chm

    xmlHttp对象参考.chmxmlHttp对象参考.chmxmlHttp对象参考.chmxmlHttp对象参考.chm

    XMLHTTP对象参考

    XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。 来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML...

    xmlHttp对象 手动Ajax

    XMLHttpRequest(通常称为xmlHttp对象)是JavaScript中的一个核心组件,它是实现异步通信(Ajax,Asynchronous JavaScript and XML)的基础。Ajax技术允许我们在不刷新整个网页的情况下与服务器进行数据交换,极大地...

    e语言-Ajax XmlHttp对象参考手册

    XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML...

    XMLHttp无刷新JSP聊天室

    XMLHttp无刷新JSP聊天室,历史上最小的XMLHttp无刷新JSP聊天室,基本上没有什么功能,此程序只为学习使用无刷新技术者使用。

    AJAX核心-XMLHTTP对象

    在JavaScript中,可以通过`new XMLHttpRequest()`来创建一个XMLHTTP对象实例。然后,我们需要对其进行初始化,设置请求的类型(GET或POST)、URL以及是否异步执行。例如: ```javascript var xhr = new ...

    XMLHttp对象在嵌入式Web实时系统中的应用.pdf

    XMLHttp对象在嵌入式Web实时系统中的应用 XMLHttp对象是Ajax技术中的核心对象,它可以实现客户端Web与嵌入式HTTP服务器之间的交互。该技术可以解决传统Web应用中频繁出现的全页刷新问题,提高系统的实时性和响应...

    XMLHTTP

    XMLHTTP,全称为...总之,XMLHTTP对象是现代Web开发中的重要工具,它实现了浏览器与服务器间的无刷新通信,从而创建出更动态、更响应式的网页应用。结合ASP和数据库,我们可以构建出高效的数据驱动的Web服务。

    一个无刷新效果定时自动更新页面的例子

    4. **定时重复请求**:为了实现定时更新,需要设置一个定时器来定期调用请求函数。 ```javascript function pollServer() { createXmlHttpRequest(); var url = "Default2.aspx?task=foo"; XmlHttp.open(...

    xmlHttp对象参考

    XMLHttpRequest(通常缩写为xmlHttp)对象是Web开发中的一个关键组件,特别是在实现异步JavaScript和XML(AJAX)技术时。这个对象允许网页在不刷新整个页面的情况下与服务器进行交互,从而提供了更加流畅和动态的...

Global site tag (gtag.js) - Google Analytics