首页 > 代码库 > 【后知后觉】AJAX核心对象——XMLHttpRequest
【后知后觉】AJAX核心对象——XMLHttpRequest
自从把AJAX学了之后,就是在云里雾里飘着,想总结,却无从下手,就一直拖到现在。最近看DRP,王勇老师简单的讲了AJAX,对这个又是技术又是技巧的东西做了再一次的解,感觉自己稍微理解了一些。现将我现在理解的分享下。
首先什么是AJAX呢?
AJAX简介:
AJAX这个名词最早是由Jesse James Garrett提出的,当时给出的解释是:Asynchronous JavaScript And XML,虽然当时Jesse James Garrett也曾发表文章介绍这个技术,但是真正被人们所熟知的时候还是在Google在Google Labs发布了Google Maps和Google搜索引擎之后。
其实关于AJAX,它是一种创建快速动态网页的一种技术,是几种技术的合成体,这几种技术包括:
基于HTML+CSS的标准的表示;
用(DOM)Document Object Model进行动态显示和交互;
用XMLHttpRequest与服务器进行异步通信;
用JavaScript绑定和处理;
用XML做数据交换 。
正式这这几种技术合成一体,才构成了强大的AJAX,那么AJAX的核心是什么呢?
AJAX的核心对象:XMLHttpRequest对象
XMLHttpRequest对象是JavaScript的一个对象,其实这个对象早在IE5(1995年发布)出现的时候就有了,是将它实现成一个对象——ActiveX,而其他浏览器是将它实现为一个本地的JavaScript对象,正是因为有这些差异,所以在JavaScript中才包含一些逻辑,从而使用Activex技术或者使用本地JavaScript对象技术创建XMLHttpRequest的实例。到底如何创建呢?
创建XMLHttpRequest对象:
var xmlhttp=null; if (window.XMLHttpRequest){ //IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else{ //IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }分析:
首先创建全局作用变量xmlhttp来保存XMLHttpRequest,根据不同的浏览器返回的对象的不同,决定实例化对象,Firefox等浏览器调用本地的JavaScript来实例化对象,而IE5,IE6根据ActiveX对象来创建XMLHttpRequest实例。那这个对象的主要方法和属性有哪些呢?
XMLHttpRequest方法与属性:
方法:
分析:
open(method,url,async) ,建立对服务器的应用,有三个参数,参数1:需要提供提交方式(GET、POST、PUT);参数2:提供所调资源的URL;参数3:指示是同步还是异步的布尔值,默认为true,表示异步。
send(string):string,可选参数,具体向服务器发出请求,如果请求声明为异步,则方法立即返回,否则会等待直到服务器接到响应为止。string,仅用于POST请求。
setRequestHeader(header,value):有两个参数,第一表示设置的首部,第二表示要在首部放置的值。
属性:
了解了XMLHttpRequest的创建、方法、属性后,我们应该怎么使用AJAX去实现一个简单的请求呢?
XMLHttpRequest对象的五步使用法:
1、 建立XMLHttpRequest对象;
2、 注册回调函数 ;
3、 使用open方法和服务器端交互;
4、 设置发送的数据,开始和服务器端交互 ;
5、 在回调函数中判断交互是否结束,响应是否正确,并根据服务器端返回的数据,更新页面内容。
实例:
前台:
<body class="body1" onl oad="init()"> <form name="userForm" target="_self" id="userForm"> <div align="center"> <hr width="97%" align="center" size=0> <table width="95%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="22%" height="29"> <div align="right"> <font color="#FF0000">*</font>用户代码: </div> </td> <td width="78%"> <input name="userId" type="text" class="text1" id="userId" onblur="validate()"size="10" maxlength="10"> <span id="spanUserId"></span> </td> </tr> <tr> <td height="26"> <div align="right"> <font color="#FF0000">*</font>用户名称: </div> </td> <td> <input name="userName" type="text" class="text1" id="userName" size="20" maxlength="20"> </td> </tr> <tr> <td height="26"> <div align="right"> <font color="#FF0000">*</font>密码: </div> </td> <td> <label> <input name="password" type="password" class="text1" id="password" size="20" maxlength="20"> </label> </td> </tr> </table> </div> </form> </body>
JS:
var xmlHttp; function createXMLHttpRequest(){ //1:创建XMLHttpRequest对象 //IE7+、Firefox等 if(window.XMLHttpRequest){ xmlHttp=new XMLHttpRequest(); }else { //IE5、IE6 if(window.ActiveXObject){ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } }
function validate() { var field = document.getElementById("userId"); if(trim(field.value).length!=0){ //1:创建ajax核心对象XMLHttpRequest createXMLHttpRequest(); var url="user_validate.jsp?userId=" + trim(field.value) + "&time=" + new Date().getTime(); //2:注册回调函数,将方法给onredystatechange属性 xmlHttp.onreadystatechange=callback; //3:使用open方法,设置请求方式、url、是否异步 xmlHttp.open("GET",url,true); //4:将设置信息发送给ajax引擎 xmlHttp.send(null); }else{ document.getElementById("spanUserId").innerHTML=""; } }
function callback(){ //5:在回调函数中判断交互是否结束,响应是否正确,并根据服务器端返回的数据,更新页面内容。 //与服务器交互完成,即Ajax引擎状态成功 if(xmlHttp.readyState==4){ //200表示“HTTP协议状态成功”,404表示“未找到”,500表示“服务器内部错误” if(xmlHttp.status==200){ if(trim(xmlHttp.responseText)!=""){ document.getElementById("spanUserId").innerHTML="<font color='red'>"+xmlHttp.responseText+"</font>"; } else{ document.getElementById("spanUserId").innerHTML=""; } }else{ alert("请求失败,错误码="+ xmlHttp.status); } } }效果如下:
总结:
Ajax,简单来说就是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面,这其中最关键的一步就是从服务器获得请求数据,实现页面无刷新,在页面内与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。