`
啸笑天
  • 浏览: 3466277 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

用js创建XMLHttpRequest对象池

    博客分类:
  • ajax
阅读更多

//使用literal语法定义一个对象:XMLHttp
var XMLHttp = 
{
	//定义第一个属性,该属性用于缓存XMLHttpRequest对象的数组
	XMLHttpRequestPool: [],
	//对象的第一个方法,该方法用于返回一个XMLHttpRequest对象
	getInstance:function()
	{
		// 从XMLHttpRequest对象池中取出一个空闲的XMLHttpRequest
		for (var i = 0; i < this.XMLHttpRequestPool.length; i ++)
		{
			//如果XMLHttpReuqest的readyState为0,或者为4,
			//都表示当前的XMLHttpRequest对象为闲置的对象
			if (this.XMLHttpRequestPool[i].readyState == 0 || 
				this.XMLHttpRequestPool[i].readyState == 4)
			{
				return this.XMLHttpRequestPool[i];
			}
		}
		//如果没有空闲的,将再次创建一个新的XMLHttpRequest对象
		this.XMLHttpRequestPool[this.XMLHttpRequestPool.length] 
			= this.createXMLHttpRequest();
		//返回刚刚创建的XMLHttpRequest对象
		return this.XMLHttpRequestPool[this.XMLHttpRequestPool.length - 1];
	},
	//创建新的XMLHttpRequest对象
	createXMLHttpRequest:function()
	{
		//对于DOM 2 规范的浏览器
		if (window.XMLHttpRequest)
		{
			var objXMLHttp = new XMLHttpRequest();
		}
		//对于Internet Explorer浏览器
		else
		{
			//将Internet Explorer内置的所有XMLHTTP ActiveX控制设置成数组
			var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 
				'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
			//依次对Internet Explorer内置的XMLHTTP控件初始化,尝试创建XMLHttpRequest对象
			for(var n = 0; n < MSXML.length; n ++)
			{
				try
				{
					//如果可以正常创建XMLHttpRequest对象,使用break跳出循环
					var objXMLHttp = new ActiveXObject(MSXML[n]); 
					break;
				}
				catch(e)
				{
				}
			}
		}
		//Mozilla某些版本没有readyState属性
		if (objXMLHttp.readyState == null)
		{
			//直接设置其readyState为0
			objXMLHttp.readyState = 0;
			//对于哪些没有readyState属性的浏览器,将load动作与下面的函数关联起来
			objXMLHttp.addEventListener("load", function ()
			{
				//当从服务器加载数据完成后,将readyState状态设为4
				objXMLHttp.readyState = 4;
				if (typeof objXMLHttp.onreadystatechange == "function")
				{
					objXMLHttp.onreadystatechange();
				}
			}, false);
		}
		return objXMLHttp;
	},
	//定义对象的第三个方法: 发送请求(方法[POST,GET], 地址, 数据, 回调函数)
	sendRequest: function (method, url, data, callback)
	{
		var objXMLHttp = this.getInstance();
		with(objXMLHttp)
		{
			try
			{
				//增加一个额外的randnum请求参数,用于防止IE缓存服务器响应
				if (url.indexOf("?") > 0)
				{
					url += "&randnum=" + Math.random();
				}
				else
				{
					url += "?randnum=" + Math.random();
				}
				//打开与服务器的连接
				open(method, url, true);
				//对于使用POST请求方式
				if (method == "POST")
				{
					// 设定请求头
					setRequestHeader('Content-Type', 
						'application/x-www-form-urlencoded');
					send(data);
				}
				//对于采用GET请求
				if (method == "GET")
				{
					send(null);
				}
				//设置状态改变的回调函数
				onreadystatechange = function ()
				{
					//当服务器的相应完成时,以及获得了正常的服务器响应
					if (objXMLHttp.readyState == 4 &&
						(objXMLHttp.status == 200 || 
							objXMLHttp.status == 304))
					{
						//当响应时机成熟时,调用回调函数处理响应
						callback(objXMLHttp);
					}
				}
			}
			catch(e)
			{
				alert(e);
			}
		}
	}
};
 
  • js.rar (1.5 KB)
  • 下载次数: 92
分享到:
评论
1 楼 osacar 2012-09-19  
不错啊!正是我想要的。

相关推荐

    创建XMLHttpRequest对象的方法.rar

    总结,"创建XMLHttpRequest对象的方法.rar"这个资源主要介绍了如何在JavaScript中创建并使用XMLHttpRequest对象进行AJAX通信,包括对象创建、状态监听、请求初始化和发送、以及响应处理等关键步骤。在实际项目中,...

    创建XMLHttpRequest对象

    ### 创建XMLHttpRequest对象 在现代Web开发中,异步JavaScript和XML(通常称为AJAX)是一种重要的技术,它允许网页在不重新加载整个页面的情况下与服务器进行数据交换。这一过程的核心在于`XMLHttpRequest`对象的...

    支持多种浏览器创建XMLHttpRequest对象代码

    ### 支持多种浏览器创建XMLHttpRequest对象代码 随着Web技术的发展与演进,跨浏览器兼容性一直是前端开发者面临的重要挑战之一。特别是在处理Ajax请求时,如何优雅地在不同浏览器(尤其是IE与其他现代浏览器)间...

    使用XMLHttpRequest对象.doc

    在使用 XMLHttpRequest 对象发送请求和处理响应之前,必须先用 JavaScript 创建一个 XMLHttpRequest 对象。由于 XMLHttpRequest 不是一个 W3C 标准,所以可以采用多种方法使用 JavaScript 来创建 XMLHttpRequest 的...

    WEB开发 之 AJAX - 创建 XMLHttpRequest 对象.docx

    在JavaScript中创建XMLHttpRequest对象非常简单,一般有两种方式: 1. 对于现代浏览器(IE7+、Firefox、Chrome、Safari和Opera): ```javascript var xmlhttp = new XMLHttpRequest(); ``` 2. 对于较老版本的...

    XMLHttpRequest对象的介绍和实现

    - **实例化XMLHttpRequest对象**:根据不同的浏览器环境,选择合适的方式来创建XMLHttpRequest对象。 - **设置请求类型**:定义请求方法(GET、POST等)。 - **指定请求URL**:定义要发送请求的目标服务器地址。 - *...

    Ajax深度剖析,XMLHttpRequest对象大揭秘

    XMLHttpRequest对象是Ajax技术的基础,它允许JavaScript在页面不刷新的情况下与服务器进行通信。创建一个XMLHttpRequest实例非常简单: ```javascript var xhr = new XMLHttpRequest(); ``` 一旦创建了实例,我们...

    Ajax中的XMLHttpRequest对象详解

    在创建 XMLHttpRequest 对象时,需要注意版本问题,可以使用 try...catch 块来尝试创建不同版本的对象: `function createXMLHttp() { var aVersions = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2...

    全面剖析XMLHttpRequest对象.txt

    在现代浏览器中,可以通过以下方式创建XMLHttpRequest对象: ```javascript var xhr = new XMLHttpRequest(); ``` 如果是在Internet Explorer 5或6中,则可能需要使用ActiveX对象的方式创建: ```javascript var ...

    XMLHttpRequest对象的创建和使用

    **创建XMLHttpRequest对象** 在JavaScript中,XMLHttpRequest对象不是内置在全局作用域内的,而是通过构造函数来创建的。你可以直接通过`new XMLHttpRequest()`来创建一个新的实例。例如: ```javascript var xhr ...

    VS2008 AJAX控件介绍 AJAX组成及XMLHttpRequest对象

    创建XMLHttpRequest对象后,可以调用其open()方法指定HTTP请求类型(GET或POST)、URL以及是否异步执行。接着,使用send()方法发送请求,如果请求是异步的,当服务器响应时,onreadystatechange事件会被触发,此时...

    ajax 入门基础之 XMLHttpRequest对象总结

    创建XMLHttpRequest对象有两种方式,一种是针对Internet Explorer浏览器,使用ActiveXObject: ```javascript http_request = new ActiveXObject("Msxml2.XMLHTTP"); http_request = new ActiveXObject("Microsoft....

    不同浏览器创建XMLHttpRequest,兼容各种浏览器(王兴魁老师视频笔记)

    本主题主要关注如何在不同的浏览器环境中创建XMLHttpRequest对象,以实现跨浏览器兼容性。 王兴魁老师是一位知名的IT教育专家,他在传智播客的课程中深入讲解了这一主题。创建XMLHttpRequest对象是AJAX的核心步骤,...

    全面剖析XMLHttpRequest对象

    1. **创建对象**:使用`new XMLHttpRequest()`创建一个新的XMLHttpRequest对象。 2. **初始化请求**:调用`open()`方法初始化请求,设置请求方式、URL以及异步标志。 3. **设置事件监听器**:监听`readystatechange`...

    XMLHttpRequest对象手册.pdf

    需要注意的是,在Internet Explorer 5 和 IE 6 中,由于这些浏览器使用的是ActiveX对象模型,因此创建XMLHttpRequest对象的方法有所不同,需通过`new ActiveXObject()`来创建。 #### 四、W3C标准化 虽然...

    javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象

    3. **创建XMLHttpRequest对象**: `getXmlHttp()` 函数负责创建兼容不同浏览器的XMLHttpRequest对象。它尝试使用一系列ActiveXObject签名创建对象(针对IE),如果都不成功,则尝试使用标准的XMLHttpRequest构造...

    XMLHttpRequest对象的使用

    首先,XMLHttpRequest对象是JavaScript内置的对象,通过创建实例化对象来使用。通常,我们会在JavaScript代码中这样创建: ```javascript var xhr = new XMLHttpRequest(); ``` 接下来,我们需要设置请求的类型...

Global site tag (gtag.js) - Google Analytics