如果采用和服务器每交互一次就新建一个XMLHttpRequest对象的方式,则会很耗费客户端的内存。
实现XMLHttpRequest对象池的大体思路是:建立一个缓存数组用来存放已经创建好的XMLHttpRequest对象,遇到用户请求需要创建XMLHttpRequest对象时,则先看缓存数组中是否已经有XMLHttpRequest对象空闲,如果有则直接从缓存中取一个试用;如果没有则重新创建一个.
var Try={
these:function(){
var returnValue;
for(var i=0,length=arguments.length;i<length;i++){
var lambda=arguments[i];
try{
//如果创建成功,则终止
returnValue=lambda();
break;
}catch(e){}
}
return returnValue;
}
};
var Ajax={
getTransport:function(){
//创建一个xmlhttp,直到成功为止
return Try.these(
function(){return new XMLHttpRequest()},
function(){return new ActiveXObject('Msxml2.XMLHTTP')},
function(){return new XMLHttpRequest('Microsoft.XMLHTTP')}
)||false;
}
};
var XMLHttp={
_xmlhttpCache:[],
_getXmlhttp:function(){
//判断是否有空闲的XMLHttp
for(var i=0;i<this._xmlhttpCache.length;i++){
if(this._xmlhttpCache[i].readyState==0||this._xmlhttpCache[i]==4){
return this.xmlhttpCache[i];
}
}
//创建一个新的xmlhttp
this._xmlhttpCache[this._xmlhttpCache.length]==Ajax.getTransport();
//返回缓存中的一个xmlhttp
return this._xmlhttpCache[this._xmlhttpCache.length-1];
},
send:function(method,url,data,callback){
var xmlhttp=this._getXmlhttp();
with(xmlhttp){
try{
if(url.indexOf("?")!=-1){//防止缓存
url+="&requestTime="+(new Date()).getTime();
}
else{
url+="?requestTime="+(new Date()).getTime();
}
//采用异步调用的方式
open(method,url,true);
//设定请求编码方式
setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');
send(data);
onreadystatechange=function(){
if(xmlhttp.readyState==4&&(xmlhttp.status==200||xmlhttp.status==304)){
//调用回调函数
callback(xmlhttp);
}
}
}
}
}
}
将上述代码单独保存为gd.js文件,然后需要用到它的页面将其引入即可
function ok(){
XMLHttp.send("get","http://127.0.0.....",null,gf);
function gf(xmlhttp){
var msgWeclome=xmlhttp.responseText;
var msg=document.getElementById("msg");
msg.innerHTML=msgWeclome;
}
}
Html引用代码如上,,
上述代码均为手抄,如果有错误自己检查下字段。
分享到:
相关推荐
为了优化这一过程,我们可以考虑创建一个XMLHttpRequest对象池,复用这些对象而不是每次请求都新建。 首先,理解XMLHttpRequest的基本工作原理至关重要。当一个XHR对象被创建时,它会占用一定的系统资源,包括内存...
在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest 对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建...
ajax XMLHttpRequest。。。。。。
为了解决这个问题,我们可以构建一个XMLHttpRequest对象池,合理地复用这些对象,从而提高应用程序的效率。 对象池是一种设计模式,用于管理一组可重用的对象,避免了反复创建和销毁对象的开销。在JavaScript中,...
当涉及到大量并发请求时,XMLHttpRequest对象池的概念就变得重要了。浏览器会限制同一时刻可以发起的并发请求数量,以防止资源耗尽。对象池就是预先创建并缓存一定数量的XMLHttpRequest实例,当需要发送请求时,可以...
`说明.txt`文件可能是对Ajax对象池实现的详细解释或者使用指南,包括如何初始化对象池,如何从池中获取和归还Ajax对象,以及如何配置对象池的大小和回收策略等。通常,对象池的大小需要根据应用的实际需求进行调整,...
### 一页面多XMLHttpRequest对象知识点详解 #### 1. XMLHttpRequest与Ajax技术 - **XMLHttpRequest简介**:`XMLHttpRequest`是一种内置的JavaScript对象,它允许网页向服务器发送异步请求并处理响应,无需重新加载...
在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象,也会造成浪费。解决的办法就是创建一...
.老生常谈—XmlHttpRequest 代码 代码如下: var xmlHttp; function createXmlHttpRequest() { if... } } 如果不用Jquery手写javascript,上面要改成XmlHttpRequest对象池,这就不写了。 .触发AutoComplete函数 代码
2. **Ajax请求**:利用JavaScript的XMLHttpRequest对象或者更现代的Fetch API,向服务器发送异步请求,携带用户名作为参数。 3. **服务器处理**:后端接收到请求,查询数据库中是否有相同的用户名。 4. **响应反馈**...
在ASP环境下,开发者可能使用XMLHttpRequest对象或者第三方库来模拟HTTP请求,获取网页内容,然后通过正则表达式或DOM解析技术提取所需信息,并将数据存储到数据库或文件中。 【ASP中的HTTP请求】在ASP中,可以使用...
1. **定义Pool类**:通过定义一个Pool类,我们可以创建一个XHR对象池。这个类中包含一些方法来管理XHR对象的创建、获取和重用。 2. **构造函数**:在Pool类的构造函数中,我们需要初始化一个数组`_cacheCase`,用于...
DWR允许JavaScript在用户的浏览器中直接调用服务器端的Java方法,这通过XMLHttpRequest对象实现了异步通信。DWR提供了一个自动化处理这些请求和响应的框架,减少了开发者处理低级Ajax细节的工作量。 在本示例中,...
`proxyPool` 属性是一个对象池,用于存储创建的XMLHttpRequest或XDomainRequest实例。`length`方法用于计算池中的对象数量,通过遍历池中的属性并减去1(因为属性`length`自身也计算在内)。 2. **索引和异步设置*...
它的核心在于利用JavaScript创建XMLHttpRequest对象,通过这个对象,可以在后台与服务器进行通信,无需刷新整个页面就能获取或发送数据。这一特性显著提升了用户体验,减少了服务器的负载,因为只需要传输必要的信息...