Ajax

3 阅读5分钟

什么是Ajax

不用刷新整个页面便可与服务器通讯的办法。AJAX采用异步交互过程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理—等待—处理—等待缺点。用户的浏览器在执行任务时即装载了AJAX引擎。AJAX引擎用JavaScript语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用Javascript调用AJAX引擎来代替产生一个HTTP的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给AJAX来执行。

AJAX异步刷新技术优点:

  1. 无刷新的好处,只更新部分页面,有效的利用带宽
  2. 提供连续的用户体验
  3. 提供类似C/S的交互效果,操作更加方便

传统web和ajax的差异

  1. 发送请求方式不同

    1. 传统web:浏览器发送同步请求
    2. Ajax技术:异步引型对象发送的请求
  2. 2.服务器响应不同:

    1. 传统web:响应内容是一个完整页面
    2. Ajax技术:响应内容只是需要的数据
  3. 3.客户端处理方式不同

    1. 传统web:需等待服务器响应完成并重新加载整个页面后用户才能进行操作
    2. ajax技术:可以动态更新页面中的部分内容,不影响用户在页面进行其他操作

XMLHttpRequest 对象

该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。实际上通常把Ajax当成XMLHttpRequest对象的代名词,为整个Ajax技术的核心提供异步发送请求的能力

XMLHttpRequest 对象方法:

1. 创建一个新的HTTP请求
open(String method,String url,boolean async, String user, String password) 
	参数说明:
	method 表示设置HTTP请求的方法,比如get,post,对大小写不敏感
	url 表示请求的url地址
	async 可选,表示指定此请求是否为异步方法,默认是true
	user  可选,如果服务器需要验证,此处需要指定用户;否则,会弹出验证窗口
	password 可选,如果用户名为空,此值忽略

2. 发送请求到服务器端
send(String  data)
	参数说明: 				
	data	表示请求发送的数据,如果method值为post,可以指定该参数,如果为get,该参数为null

3. 取消当前请求
abort()			
		
4. 设置请求的某个HTTP头信息
setRequsetHeader(String header,String value)
	参数说明: 			
	header	表示指定的http头名称
	value	  表示指定的http头名称所对应的值

5. 获取响应的指定HTTP头信息
getResponseHeader(String header)		
	参数说明: 	
	header	表示要获取的指定http头

6. 获取响应的所有HTTP头信息
getAllResponseHeader()			

XMLHttpRequest 对象常用属性:

onreadystatechange		设置回调函数
readyState		   返回请求的当前状态(0:为初始化,1:开始发送请求,2:请求发送完成,3:开始读取响应,4:读取响应结果)
status			     返回当前请求的Http状态码(200:正确返回,404:找不到访问对象)
statusText		   返回当前请求的响应行状态
responseText		 以文本形式获取响应值
responseXML 		 以XML形式获取响应值,并且解析成DOM对象返回

事件: onreadystatechange:指定回调函数
常用属性:(续)
	readyState:XMLHttpRequest的状态信息
	0----XMLHttpRequest对象未完成初始化
	1----XMLHttpRequest对象开始发送请求
	2----XMLHttpRequest对象的请求发送完成
	3----XMLHttpRequest对象开始读取响应
	4----XMLHttpRequest对象读取响应结束

常用属性:(续)
	status:HTTP的状态码
	200----服务器正确返回响应
	404----请求的资源不存在
	500----服务器内部错误
	403----没有访问权限

	statusText:返回当前请求的响应状态
	responesText:以文本形式获得响应的内容
	responseXML:将XML格式的响应内容解析成DOM对象返回
事例:简单初始化
XMLHttpRequest对象初始化
function createXmlHttpRequest(){
   var xmlHttp;
   try{
      xmlHttp=new XMLHttpRequest();
   }catch (e){
      try{    
         xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }catch (e){
          try{
              xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
          }catch (e){}  
       }
    }
	  return xmlHttp;
 }

代码
// 发送请求
function sendRequest(){
	// 获取文本框的值
	var chatMsg = input.value;
	var url="chatServlet.do?charMsg="+chatMsg;
	// 建立对服务器的调用
	XMLHttpReq.open("POST",url,true);
	// 设置MiME类别,如果用 POST 请求向服务器发送数据,
	// 需要将"Content-type" 的首部设置为 "application/x-www-form-urlencoded".
	// 它会告知服务器正在发送数据,并且数据已经符合URL编码了。
	XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	// 状态改变的事件触发器,客户端的状态改变会触发readystatechange事件,
	// onreadystatechange会调用相应的事件处理函数
	XMLHttpReq.onreadystatechange=processResponse;
	// 发送数据
	XMLHttpReq.send(null);
}

2.注册回调函数
xmlhttp.onreadystatechange = callback(){
	// 判断对象的状态是交互完成
	if(xmlhttp.readystate == 4){
		....
	}
}

数据格式提要

在服务器端 AJAX 是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。但是从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言只能以如下 3 种格式返回数据:XML,JSON,HTML