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

XMLHttpRequest 对象封装

    博客分类:
  • Ajax
阅读更多

XMLHttpRequest 对象的创建

/* XMLHttpRequest 对象构造器 */
function CallBackObject() {
	this.XmlHttp = this.GetHttpObject();
}

/* 取得 XMLHttpRequest 对象 */
CallBackObject.prototype.GetHttpObject = function() {
	var xmlhttp;
	
	/* 浏览器判断,不同的浏览器、浏览器版本 XMLHttpRequest 对象的创建方式是不同的 */
	/*@cc_on
	 @if (@_jscript_version >= 5)  
	 	try {
	 		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	 	} catch(e) {
	 		try {
	 			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	 		} catch(E) {
	 			xmlhttp = false;
	 		}
	 	}
	@else 
	 	xmlhttp = false;
	@end 
	@*/
	
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch(e) {
			xmlhttp = false;
		}
	}
	
	return xmlhttp;
}

/**
 * Ajax 回调方法
 * 
 * @param {Object} URL 传入要访问的URL地址作为参数
 */
CallBackObject.prototype.DoCallBack = function(URL) {
	if(this.XmlHttp){
		if(this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0) {
			var oThis = this;
			this.XmlHttp.open('POST', URL);
			this.XmlHttp.onreadystatechange = function() {
				oThis.ReadyStateChange();
			};
			this.XmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			this.XmlHttp.send(null);
		}
	}
}

CallBackObject.prototype.AbortCallBack = function() {
	if(this.XmlHttp) {
		this.XmlHttp.abort();
	}
}

CallBackObject.prototype.OnLoading = function() {
	//Loading
}

CallBackObject.prototype.OnLoaded = function() {
	//Loaded
}

CallBackObject.prototype.OnInteractive = function() {
	//Interactive
}

CallBackObject.prototype.OnComplete = function(responseText, responseXML) {
	//Complete
}

CallBackObject.prototype.OnAbort = function() {
	//Abort
}

CallBackObject.prototype.OnError = function(status, statusText) {
	//Error
}

/**
 * XMLHttpRequest.readyState
 * 		0, 请求未初始化(还没有调用XMLHttpRequest对象的open方法)
 * 		1, 请求已经建立,但是还没有发送(还没有调用XMLHttpRequest对象的send方法)
 * 		2, 请求已发送,正在处理中
 * 		3, 请求在处理中,通常响应中已有部分数据可用,但是服务器还咩有完成响应的生成
 * 		4, 请求成功完成,可以获取并且使用服务器的响应
 */
CallBackObject.prototype.ReadyStateChange = function() {
	if(this.XmlHttp.readyState == 1){
		this.OnLoading();
	} else if (this.XmlHttp.readyState == 2){
		this.OnLoaded();
	} else if (this.XmlHttp.readyState == 3){
		this.OnInteractive();
	} else if (this.XmlHttp.readyState == 4) {
		if(this.XmlHttp.status == 0) {
			//服务器端无任何相应,执行忽略操作
			this.OnAbort();
		} else if (this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK") {
			//请求一切正常,对GET和POST请求的应答文档跟在后面
			this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);
		} else {
			//错误处理
			this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);
		}
	}
}

 

 

XMLHttpRequest 对象的使用的简单示例

使用XMLHttpRequest对象向服务器端发送请求的基本流程可以分为5步:

  1. 从Web表单中获取需要的数据
  2. 建立要连接的URL
  3. 打开到服务器的连接
  4. 设置服务器在完成后要运行的函数
  5. 发送请求

 

function callServer() {
	//从Web表单中获取数据
	var id = document.getElementById("id").value;
	var name = document.getElementById("name").value;
	
	//只有在数据不为空时才发出请求
	if(id == null || id == "") return;
	if(name == null || name == "") return; 
	
	//请求的URL
	/**
	 * escape()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,而且使用此种方案还可以避免中文乱码的出现。
	 * 当使用escape()编码后,在取出值以后需要使用unescape()进行解码才能得到原来的值。
	 */
	var url = "logon.jsp?id=" + escape(id) + "" + escape(name);
	
	//访问服务器,打开连接
	xmlHttp.open("GET", url, true);
	
	//设置请求完成时的相应函数
	xmlHttp.onreadystatechange = updatePage;
	
	//发送请求
	xmlHttp.send(null);
}

/* 处理HTTP响应 */
function updatePage() {
	if(xmlHttp.readyState == 4) {
		var response = xmlHttp.responseText; //HTTP请求返回的文本内容
		document.getElementById("duty").value = response;
	}
}

 

 

 

 

分享到:
评论

相关推荐

    XMLHttpRequest对象的介绍和实现

    为了更好地封装和管理XMLHttpRequest对象的操作,可以创建一个名为ServerAccessObject的模块。该模块应该包括以下功能: - **初始化XMLHttpRequest对象**。 - **发送请求**。 - **处理响应**。 - **错误处理**。 ...

    创建XMLHttpRequest对象

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

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

    在VS2008中,开发者可以直接使用AJAX控件,它们封装了XMLHttpRequest对象的复杂操作,简化了开发流程。例如,UpdatePanel控件背后的实现就是基于XMLHttpRequest对象的,它自动处理了请求和响应的处理逻辑,使得...

    使用XMLHttpRequest对象.doc

    XMLHttpRequest对象是Ajax技术的核心,它允许Web应用程序在不刷新整个页面的情况下与服务器进行异步数据交换,从而实现页面的局部更新。这个对象在不同浏览器中的实现方式有所不同,最初由IE5作为ActiveX组件引入,...

    全面剖析XMLHttpRequest对象

    XMLHttpRequest对象是AJAX(异步JavaScript和XML)技术的核心,它允许Web应用程序在不刷新整个页面的情况下与服务器进行数据交换,从而实现更加流畅和互动的用户体验。在现代浏览器中,无论是在JavaScript、Jscript...

    MS的Ajax用(js)封装

    XMLHttpRequest 对象封装 在MS的Ajax库中,XMLHttpRequest对象被封装为`Sys.Net.XMLHttpExecutor`类。这个类提供了一个更友好的接口,使得开发者可以更容易地发送异步请求。例如,你可以创建一个`XmlHttpExecutor`...

    javascript对XMLHttpRequest异步请求的面向对象封装

    首先,`CallBackObject`构造函数初始化了一个`XmlHttp`属性,这是XMLHttpRequest对象的实例。在`GetHttpObject`方法中,代码通过条件语句实现了浏览器兼容性检查,创建了XMLHttpRequest对象。对于较旧的IE浏览器,它...

    XmlHttpRequest对象直接访问与通过Soap协议访问WebSevice详解示例

    XMLHttpRequest对象是JavaScript中用于实现异步HTTP请求的关键工具,它允许前端与服务器进行通信而无需刷新整个网页。在Web开发中,它被广泛应用于AJAX(Asynchronous JavaScript and XML)技术,实现实时更新页面...

    asp.net ajax操作xmlHttpRequest对象返回的ResponseXML和ResponseText例子

    在ASP.NET AJAX中,通常会使用`Sys.Net.XMLHttpExecutor`类来封装XMLHttpRequest对象的操作。这个类提供了`executeRequest`方法,用于发送异步请求,并且在完成时触发回调函数,此时`ResponseXML`和`ResponseText`...

    AJAX客户端说明,XMLHttpRequest对象

    其中客户的XMLHttpRequest对象的封装,就足以让人大饱眼福,在一般的浏览器其都能够运行AJAX。下面我们来学习学习这个咚咚,希望能给更多的人带来帮助。 首先当然是要了解一下浏览器中的XMLHttp对象了: XMLHTTP方法...

    使用XMLHttpRequest访问Web Services(ASP.NET Web)

    XMLHttpRequest对象是浏览器内置的一个API,它提供了在后台与服务器进行通信的能力。通过创建XMLHttpRequest实例,我们可以发送HTTP请求并接收响应,这在AJAX(Asynchronous JavaScript and XML)应用中尤为常见。...

    Microsoft Ajax Library

    - `MicrosoftAjax.debug.js`和`MicrosoftAjax.js`:这是主Ajax库,包含了核心的客户端脚本组件,如数据类型、数组扩展、日期和时间处理、XMLHttpRequest对象封装等。`debug.js`版本是为了方便调试,包含了额外的诊断...

    XMLHttpRequest对象_Ajax异步请求重点(推荐)

    XMLHttpRequest对象是Ajax技术的核心,它使得JavaScript可以与服务器进行异步数据交换,无需刷新整个网页。这个对象允许客户端向服务器发送HTTP请求,并接收服务器的响应,从而实现了局部刷新的效果,提高了用户体验...

    如何用ajax来创建一个XMLHttpRequest对象

    为了简化代码和提高可维护性,你可以将创建XMLHttpRequest对象的过程封装到一个单独的函数中,如`CreateHTTPObject()`所示: ```javascript function CreateHTTPObject() { var xmlhttp; try { xmlhttp = new ...

    三种方式获取XMLHttpRequest对象

    本篇文章将详细解析获取XMLHttpRequest对象的三种常见方法。 1. **创建XMLHttpRequest对象的原始方式** 在早期的浏览器实现中,XMLHttpRequest对象的创建方式因浏览器内核不同而有所差异。对于基于Gecko内核(如...

    jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法

    尽管jQuery对原生的XMLHttpRequest对象进行了封装,但有时候开发者可能需要直接访问原生的xhr对象,以便调用一些原生对象才有的属性或方法。 在使用jQuery的$.ajax方法进行数据交互时,通常可以不需要关心底层的...

    C# XMLHttpRequest

    XMLHttpRequest对象是AJAX(Asynchronous JavaScript and XML)的核心,尽管它的名字中包含XML,但实际上它可以处理各种类型的数据格式,如JSON、文本或二进制流。xhr对象具有多个属性和方法,如`open()`、`send()`...

    javascript Ajax 类实现代码

    封装类中首先尝试创建XMLHttpRequest对象,这个对象是进行AJAX操作的关键。在创建过程中,根据浏览器是否支持ActiveXObject来决定创建方式。如果浏览器是IE,则尝试创建Msxml2.XMLHTTP或Microsoft.XMLHTTP对象;如果...

    GWT中的xmlHttpRequest

    GWT提供了对XHR的封装,使得开发者可以方便地使用JavaScript的XMLHttpRequest对象,而无需直接接触底层的JavaScript代码。在《GWT揭秘》一书的8.1节中,详细讲解了如何在GWT中使用XMLHttpRequest来请求动态数据。本...

Global site tag (gtag.js) - Google Analytics