前言
在学习js的过程,我个人对于Ajax这项技术有着很深的印象,大概是因为它在我们网页开发过程中常见的交互里所发挥的作用太过于关键了吧,所以我想在这里好好地谈一些自己对它的理解。
概念理解
Ajax英文全称为Asynchronous JavaScript and XML,意思就是异步JS和XML;那么既然讲到异步,我在这里要说明一下同步和异步现象。
同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待卡死状态。
异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死。
那么可以理解为异步是相对于同步来说的,同步即同时进行(累积多了就排队,一个一个执行,必须等上一个结束,才能到下一个),而异步就是执行到我了,我去旁边继续执行等结果,后面排队的继续不用等我结果出来再执行。
技术特点
AJAX 是一种用于创建快速动态网页的技术,对网页的某部分进行更新,不用刷新整个网页。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。而我之前所用过的诸如servlet+javabean在实现前后端交互时,如果需要更新内容,必需重载整个网页面。所以可以看出使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。
工作原理
简单来说工作原理是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。这相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做,,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。下面我引用一张图来体现Ajax所实现的浏览器和服务器之间的数据交互:
核心机制
XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
下面我通过表格来展示XMLHttpRequest这个对象的属性和方法:
属性 |
说明 |
readyState |
表示XMLHtpRequest对象的状态: 0: 未初始化。对象已创建,未调用open; 1: open方法成功调用,但Sendf方法未调用; 2: send方法已经调用,尚未开始接受数据; 3:正在接受数据。Http响应头信息已经接受,但尚未接收完成; 4:完成,即响应数据接受完成。 |
Onreadystatechange |
请求状态改变的事件触发器(readyState 变化时会调用这个属性上注册的javascript函数)。 |
responseText | 服务器响应的文本内容 |
responseXML | 服务器响应的XML内容对应的DOM对象 |
Status |
服务器返回的http状态码。200表示“成功”,404表示“未找到”,500表示“服务器内部错误”等。 |
statusText | 服务器返回状态的文本信息 |
方法 |
说明 |
Open(string method,string url,boolean asynch,string username,string password) |
指定和服务器端交互的HTTP方法,URL地址,即其他请求信息; Method:表示http请求方法,一般 使用"GET","POST"; url:表示请求的服务器的地址; asynch:表示是否采用异步方法,true为异步,false为同步; username和password分别表示用户名和密码,提供http认证机制需要的用户名和密码。 |
Send(content) |
向服务器发出请求,如果采用异步方式,该方法会立即返回。 |
SetRequestHeader(String header,String Value) |
设置HTTP请求中的指定头部header的值为value; 此方法需在open方法以后调用,一般在post方式中使用。 |
getAllResponseHeaders() |
返回包含Http的所有响应头信息,其中相应头包括Content-length,date,url等内容。 |
getResponseHeader(String header) | 返回HTTP响应头中指定的键名header对应的值 |
Abort() |
停止当前http请求。对应的XMLHttpRequest对象会复位到未初始化的状态。 |
下面展示一个简单的打开与服务器的连接(open方法):
var xhr = new XMLHTTPRequest();
xhr.open("method", "url", "async");
xhr.send(null);
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){
if(xhr.status == 200){
console.log(xhr.responseText)
}
}
}
常见使用流程
1.添加XMLHttpRequest对象。
2.打开与服务器的连接(open方法)。
3.发送请求(send方法)。
4.接收服务器响应。
5.if 发送POST请求。
总结
Ajax技术对于用户体验极佳,用户不需要刷新页面就能获取可更新的数据,也不需要插件支持,它的运用能够提升 Web 程序的性能,并减轻服务器和带宽的负担。但它也使得前进、后退的功能被破坏,因为 Ajax 永远在当前页,不会记录前后页面。并且我了解到在进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。如果不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到厌烦。