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

XMLHttpRequest对象池

    博客分类:
  • JS
阅读更多
如果采用和服务器每交互一次就新建一个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引用代码如上,,

上述代码均为手抄,如果有错误自己检查下字段。
分享到:
评论

相关推荐

    用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