Ajax之旅(二)--XMLHttpRequest

上文中提到的Ajax的异步更新,主要使用XMLHttpRequest对象来实现的,XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据。 关于XMLHttpRequest对象方法和属性如下(聊一眼即可,不是本文重点):

<html>
<head>
<title>XMLHTTPRequest对象的说明DEMO</title>
<script language="javascript" type="text/javascript">
<!--
var xmlhttp;
// 创建一个XMLHTTPRequest对象
function createXMLHTTPRequext(){
      if(window.ActiveXObject) {
           xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
    }
    else if(window.XMLHTTPRequest){
       xmlhttp = new XMLHTTPRequest();
    }
}
function PostOrder(xmldoc)
{
    createXMLHTTPRequext();

    // Open方法---创建一个新的http请求,并指定此请求的方法、URL以及验证信息
    // 	    (1)语法:XMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);
    //      (2)参数:bstrMethod(http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感)
	//				   bstrUrl(请求的URL地址,可以为绝对地址也可以为相对地址)
	//				   varAsync[可选](布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数)
	//				   bstrUser[可选](如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口)
    //                 bstrPassword[可选](验证信息中的密码部分,如果用户名为空,则此值将被忽略)

    // 备注:调用此方法后,可以调用send方法向服务器发送数据。
    xmlhttp.Open("get", "http://localhost/example.htm", false);

    // onreadystatechange属性---指定当readyState属性改变时的事件处理句柄
    //  	(1)语法:XMLHttpRequest.onreadystatechange = funcMyHandler;
    //      (2)如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,
    // 		(3)当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活

    // 备注:此属性只写,为W3C文档对象模型的扩展
    xmlhttp.onreadystatechange= HandleStateChange; 

    // send方法---发送请求到http服务器并接收回应
    // 		(1)语法:XMLHttpRequest.send(varBody);
    // 		(2)参数:varBody (欲通过此请求发送的数据) 

	// 备注:此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync == False,此方法将会等待请求完成或者超时时才会返回,如果bAsync == True,此方法将立即返回。
    xmlhttp.Send(xmldoc);

    // abort方法---取消当前请求
    // 		(1)语法:XMLHttpRequest.abort();

    // 备注:调用此方法后,当前请求返回UNINITIALIZED 状态。
    xmlhttp.abort();

}
function HandleStateChange()
{
    // readyState属性---返回XMLHTTP请求的当前状态
    // 		(1)语法:lValue = oXMLHttpRequest.readyState;

	// 备注:变量,此属性只读,状态用长度为4的整型表示.定义如下:
    // 		(1)0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
    // 		(2)1 (初始化) 对象已建立,尚未调用send方法
    // 		(3)2 (发送数据) send方法已调用,但是当前的状态及http头未知
    // 		(4)3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
    // 		(5)4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
    if (xmlhttp.readyState == 4){
		if(xmlhttp.status =200 )
		{
		     document.frmTest.myButton.disabled = false;

		   //status属性---返回当前请求的http状态码
		   // 		(1)语法:Value = oXMLHttpRequest.status;
		   // 		(2)返回值:长整形标准http状态码,定义如下:
		   //
							 // 100:Continue
							 // 101:Switching protocols
							 // 200:OK
							 // 201:Created
							 // 202:Accepted
							 // 203:Non-Authoritative Information
							 // 204:No Content
							 // 205:Reset Content
							 // 206:Partial Content
							 // 300:Multiple Choices
							 // 301:Moved Permanently
							 // 302:Found
							 // 303:See Other
							 // 304:Not Modified
							 // 305:Use Proxy
							 // 307:Temporary Redirect
							 // 400:Bad Request
							 // 401:Unauthorized
							 // 402:Payment Required
							 // 403:Forbidden
							 // 404:Not Found
							 // 405:Method Not Allowed
							 // 406:Not Acceptable
							 // 407:Proxy Authentication Required
							 // 408:Request Timeout
							 // 409:Conflict
							 // 410:Gone
							 // 411:Length Required
							 // 412:Precondition Failed
							 // 413:Request Entity Too Large
							 // 414:Request-URI Too Long
							 // 415:Unsupported Media Type
							 // 416:Requested Range Not Suitable
							 // 417:Expectation Failed
							 // 500:Internal Server Error
							 // 501:Not Implemented
							 // 502:Bad Gateway
							 // 503:Service Unavailable
							 // 504:Gateway Timeout
							 // 505:HTTP Version Not Supported

		   // 备注:长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。
		   alert(xmlhttp.status);

		}
    }
}
//-->
</script>
</head>
<body>
<form name="frmTest">
    <input name="myButton" type="button" value="Click Me" onclick="PostOrder('http://localhost/example.htm');">
</form>
</body>
</html>

要想更加深入的了解XMLHttpRequest对象,只知道其方法和属性只是其基础,我们还需要理解其创建和使用过程。以下是我通过一个小Demo总结分析的XMLHttpRequest对象创建和使用的,算是原理吧。不足之处还请您指导!

1.首先,通过createXMLHTTPRequest方法,创建一个XMLHTTPRequest对象。其中简单的分支逻辑是为了确定如何创建对象。判断浏览器是否支持ActiveX控件,依此来确定浏览器是否为IE。

2.其次,通过Open方法,建立对服务器的调用,并且设置URL以及所希望的HTTP方法,通常是Get或者Post。关于Get和Post的不同,请见下图:

3.再者,当通用服务器后,我们需要完成一项任务,那便是确定当服务器返回所需数据,或者说XMLHTTPRequest的状态发生变化时,调用HandleStateChange函数。xmlhttp.onreadystatechange=
HandleStateChange;

4.然后,当设置好“要去哪儿(对服务器的调用)”和“回到哪儿(HandleStateChange函数)”后,就可以发送请求了。xmlhttp.Send(xmldoc);

5.最后,就需要HandleStateChange函数来检查XMLHTTPRequest的readystate属性,然后检查服务器返回的状态码,如果一切正常,HandleStateChange函数就会在客户端执行相应操作。这也就是所谓的回调函数。

以上说了说XMLHTTPRequest这个Ajax核心对象的使用,那么它是如何实现异步更新的呢?这就体现在咱们上面提到的回调函数了。大家看上面程序的调用顺序,在第三步中我们就设置了服务器返回数据时所需调用的函数,设置完成之后,我们就不用管他了,完全可以继续我们下一步的操作(例如第四步),在我们的操作过程中,一旦XMLHTTPRequest的状态发生变化,就会自动调用HandleStateChange函数,来实现其中功能。这整个过程就很容易的实现了异步更新。

Ajax之旅(二)--XMLHttpRequest,布布扣,bubuko.com

时间: 2024-10-26 20:26:20

Ajax之旅(二)--XMLHttpRequest的相关文章

ajax学习篇(二)XMLHttpRequest的创建和使用

前言:上篇我们介绍了ajax是什么和ajax的执行流程本篇我们介绍实现ajax的对象XMLHttpRequest对象 1.如何使用XMLHttpRequest做ajax请求? 首先我们要先创建XMLHttpRequest对象,按标准new XMLHttpRequest()即可得到,但是如果考虑到低版本的ie那么我们可以new Window.ActiveXObject(Mircosoft.XMLHttp); 下面我们写一个版本兼容函数来创建我们的XMLHttpRequest对象. 1 functi

Ajax之旅(三)-- 异步更新

上篇博文中,已经为大家在理论上讲述了什么是XMLHttpRequest对象,它是Ajax实现异步更新的核心对象.下面,我们就通过一个实例,来了解XMLHTTPRequest对象的使用或者说异步更新的实现. 实例:判断用户代码是否重复        方案一:同步更新.原理如下图所示: 从上图中可以看到,当我们在浏览器用户代码输入框中输入"用户代码"后,只能等待服务器的响应,当服务器将结果反馈给浏览器后,我们才可以进行下一个操作,也就是继续输入"用户名称". 这就是同步

AJAX学习整理二之简单实例

做了几个简单的实例,加载txt文本内容.加载xml文件内容,把xml文本内容转换成html表格显示.废话不多说,直接贴代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <head>     <title>通过ajax获取文本内容</title>     <meta charset="utf-8">     <scr

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

Ajax系列之二:核心对象XMLHttpRquest

上一篇文章介绍了ajax的基础知识,这篇文章通过一个简单的用户验证的小例子来给大家讲解一下! 首先来了解一个这个对象: XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据. XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力.XMLHttpRequest 可以同步或异步返回

AJax 学习笔记二(onreadystatechange的作用)

AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了onreadyStateChange事件实现这一功能.这类似于回调函数的做法.onreadyStateChange事件可指定一个事件处理函数来处理XMLHttpRequest对象的执行结果,如: 复制代码 代码如下: ajaxObj=createAjaxObject(); var url="/MyTod

Ajax提交底层原型XMLHttpRequest

相信接触过ajax的都觉得其post,get提交很方便,那么他是怎么实现的呢?基于此我们就不得不谈到js中的XMLHttpRequest对象. 其中w3c中是这样解释的: XMLHttpRequest 对象用于在后台与服务器交换数据. XMLHttpRequest 对象是开发者的梦想,因为您能够: 在不重新加载页面的情况下更新网页 在页面已加载后从服务器请求数据 在页面已加载后从服务器接收数据 在后台向服务器发送数据 所有现代的浏览器都支持 XMLHttpRequest 对象. XMLHttpR

ajax起步 (二)

Ajax的关键在于XMLHttpRequest对象,如下基本用法: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div> <button>Apples</button> <button>Cherries</bu

Ajax异步请求(二)

业精于勤,荒于嬉:行成于思,毁于随. ----致自己 目录: 二.jQuery四种常用的Ajax请求方式简介 1.$.ajax() 2.$.get() 3.$.post() 4.$.getJSON() ==================1.$.ajax()======================== jQuery在异步请求方面封装的较好,直接使用Ajax比较麻烦,jQuery大大简化了我们的使用,不用考虑浏览器之间的差异了. $.ajax()是jQuery底层ajax的实现,$.get()