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

复制代码 代码如下:

function CallBackObject()

{

this.XmlHttp = this.GetHttpObject();

}

CallBackObject.prototype.GetHttpObject = function() //动态为CallBackObject的原型添加了GetHttpObject共有方法

{

//第一步:创建XMLHttpRequest对象

//进行兼容性判断

var xmlhttp;

/*@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;

}

CallBackObject.prototype.DoCallBack = function(URL)

{

if( this.XmlHttp )

{

if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )

{

var oThis = this;

//第二步:注册回调方法,当服务器处理结束返回数据以后利用回调方法实现局部的页面刷新数据

//这个回调方法实际上在每次XMLHttpRequest对象的readyState属性的值发生变化的时候都会被调用

this.XmlHttp.onreadystatechange = function() {

//根据XmlHttp.readyState返回值不同调用不同的方法。

oThis.ReadyStateChange();

};

//第三步:设置和服务器交互的相应参数

this.XmlHttp.open('POST', URL);

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.ReadyStateChange = function() {

//第五步:判断和服务器交互是否完成,还要判断服务器端是否正确返回数据

//this.XmlHttp.readyState == 0初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。

if (this.XmlHttp.readyState == 1) {

//open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。

this.OnLoading();

}

else if (this.XmlHttp.readyState == 2) {

//Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。

this.OnLoaded();

}

else if (this.XmlHttp.readyState == 3) {

//Receiving 所有响应头部都已经接收到。响应体开始接收但未完成。

this.OnInteractive();

}

else if (this.XmlHttp.readyState == 4) {

//Loaded HTTP 响应已经完全接收。

if (this.XmlHttp.status == 0)

this.OnAbort();

else if (this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK")

this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);

else

this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);

}

}

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

}

调用方法如下:

复制代码 代码如下:

<script type="text/javascript">

function createRequest()

{

var name = escape(document.getElementById("name").value);

var cbo = new CallBackObject();

cbo.OnComplete = Cbo_Complete;

cbo.onError = Cbo_Error;

cbo.OnLoaded = OnLoading;

cbo.DoCallBack("AjaxTest.aspx?name=" + name);

}

function OnLoading() {

alert("OnLoading " );

}

function Cbo_Complete(responseText, responseXML)

{

alert("成功 "+responseText);

}

function Cbo_Error(status, statusText, responseText)

{

alert(responseText);

}

</script>

onreadystatechange事件

  无论readyState值何时发生改变,XMLHttpRequest对象都会激发一个readystatechange事件。其中,onreadystatechange属性接收一个EventListener值-向该方法指示无论readyState值何时发生改变,该对象都将激活。

  responseText属性

  这个responseText属性包含客户端接收到的HTTP响应的文本内容。当readyState值为0、1或2时,responseText包含一个空字符串。当readyState值为3(正在接收)时,响应中包含客户端还未完成的响应信息。当readyState为4(已加载)时,该responseText包含完整的响应信息。

  responseXML属性

  此responseXML属性用于当接收到完整的HTTP响应时(readyState为4)描述XML响应;此时,Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾。如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。无论何时,只要readyState值不为4,那么该responseXML的值也为null。

  其实,这个responseXML属性值是一个文档接口类型的对象,用来描述被分析的文档。如果文档不能被分析(例如,如果文档不是良构的或不支持文档相应的字符编码),那么responseXML的值将为null。

  status属性

  这个status属性描述了HTTP状态代码,而且其类型为short。而且,仅当readyState值为3(正在接收中)或4(已加载)时,这个status属性才可用。当readyState的值小于3时试图存取status的值将引发一个异常。

  statusText属性

  这个statusText属性描述了HTTP状态代码文本;并且仅当readyState值为3或4才可用。当readyState为其它值时试图存取statusText属性将引发一个异常。

时间: 2024-09-16 17:03:40

javascript对XMLHttpRequest异步请求的面向对象封装的相关文章

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

复制代码 代码如下: function CallBackObject() { this.XmlHttp = this.GetHttpObject(); } CallBackObject.prototype.GetHttpObject = function() //动态为CallBackObject的原型添加了GetHttpObject共有方法 { //第一步:创建XMLHttpRequest对象 //进行兼容性判断 var xmlhttp; /*@cc_on @if (@_jscript_ver

JSP+JavaScript 用XMLHttpRequest()同时请求

问题描述 我想用XMLHttpRequest 分别请求三个xml文档,用循环function request_xml(){for(var i=0; i<3;i++){url="test"+i+".xml";send_post(url); //alert(i);}}可是只请求到最后一个,我怀疑请求间隔时间太短,最终返回结果只有一个.可当加了alert(i)拖延时间就没问题.我想请教的就是怎样比较快的从不同主机获得数据,然后按顺序在表格中列出.多线程可以吗,JSP

ajax的工作原理以及异步请求的封装介绍_AJAX相关

Ajax原理: 客户端通过浏览器的内置对象XMLHttpRequest来发送异步请求,当服务器返回响应时,会调用先前注册的回调函数,在回调函数中可以使用javascript操作DOM来更新页面,异步请求不会阻塞客户端的操作,达到页面无法刷新就可以更新数据的效果. 异步请求的封装: 复制代码 代码如下: var xhr=false; //step1:创建一个兼容浏览器各个版本的XMLHttpRequest对象 if (window.XMLHttpRequest) { //IE7+, Firefox

ajax的工作原理以及异步请求的封装介绍

Ajax原理: 客户端通过浏览器的内置对象XMLHttpRequest来发送异步请求,当服务器返回响应时,会调用先前注册的回调函数,在回调函数中可以使用javascript操作DOM来更新页面,异步请求不会阻塞客户端的操作,达到页面无法刷新就可以更新数据的效果. 异步请求的封装: 复制代码 代码如下: var xhr=false; //step1:创建一个兼容浏览器各个版本的XMLHttpRequest对象 if (window.XMLHttpRequest) { //IE7+, Firefox

使用 JavaScript 和 Ajax 发出异步请求

ajax|javascript|请求|异步 多数 Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面.常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程.有了 Ajax 和 XMLHttpRequest 对象,就可以使用不必让用户等待服务器响应的请求/响应模型了.本文中,Brett McLaughlin 介绍了如何创建能够适应不同浏览器的 XMLHttpRequest 实例,建立和发送请求,并响应服务器. 本系列的上一期文章(请参阅 参考资

使用JavaScript和Ajax发出异步请求

ajax|javascript|请求|异步 多数 Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面.常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程.有了 Ajax 和 XMLHttpRequest 对象,就可以使用不必让用户等待服务器响应的请求/响应模型了.本文中,Brett McLaughlin 介绍了如何创建能够适应不同浏览器的 XMLHttpRequest 实例,建立和发送请求,并响应服务器. 本文中,您将开始接触最基本和基础性

掌握Ajax第2部分:使用JavaScript和Ajax发出异步请求

ajax|javascript|请求|异步 Brett McLaughlin ,作家,编辑,O'Reilly Media Inc.2006 年 2 月 16 日 多数 Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面.常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程.有了 Ajax 和 XMLHttpRequest 对象,就可以使用不必让用户等待服务器响应的请求/响应模型了.本文中,Brett McLaughlin 介绍了如何创建能够适

如何使用JavaScript和Ajax发出异步请求(二)

ajax|javascript|请求|异步   打开请求 有了要连接的 URL 后就可以配置请求了.可以用 XMLHttpRequest 对象的 open() 方法来完成.该方法有五个参数: request-type:发送请求的类型.典型的值是 GET 或 POST,但也可以发送 HEAD 请求. url:要连接的 URL. asynch:如果希望使用异步连接则为 true,否则为 false.该参数是可选的,默认为 true. username:如果需要身份验证,则可以在此指定用户名.该可选参

如何使用JavaScript和Ajax发出异步请求(一)

ajax|javascript|请求|异步 多数 Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面.常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程.有了 Ajax 和 XMLHttpRequest 对象,就可以使用不必让用户等待服务器响应的请求/响应模型了.本文中,Brett McLaughlin 介绍了如何创建能够适应不同浏览器的 XMLHttpRequest 实例,建立和发送请求,并响应服务器. 本文中,您将开始接触最基本和基础性