ajax(asynchronous javascript and xml)
1.ajax是什么
ajax是一种用来改善用户体验的技术,其本质是利用浏览器提供的一个特殊的对象(XMLHttpRequest,也可称之为ajax对象)向服务器发送异步请求。服务器返回部分数据(通常不需要返回完整页面),浏览器利用这些数据对当前页面做部分更新。整个过程,页面无刷新,不打断用户的操作。
注:
异步请求:发送请求的同时,浏览器不会销毁当前页面,用户仍然可以对当前页面做其他操作。
使用ajax请求的过程:
不使用ajax的请求过程:
2.如何获得ajax对象
要区分浏览器:
function getXhr(){
var xhr=null;
if(window.XMLHttpRequest){
//非IE
xhr= new XMLHttpRequest();
}else{
x hr=new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
3.ajax对象的几个重要的属性
a.onreadystatechange:用来绑定一个事件处理函数,用来处理readystatechange时间。
注意:当ajax对象的readystate属性值返生了任何改变,比如从0变成了1,就会产生readystatechange事件。
b.readyState:有五个值(0,1,2,3,4),表示ajax对象与服务器通信的状态。其中,当值为4的时候,表示ajax对象已经获得了服务器返回的所有数据。
c.responseText:获得服务器返回的文本数据。
d.responseXML:获得服务器返回的xml数据。
e.status :获得状态码。
4.编程步骤
step1.获得ajax对象
比如:var xhr=getXhr();
step2.发送请求。
发送get请求:
a.xhr.open(‘get’,’check_uname.do?uname=tom&age=22’,true);
b.xhr.onreadystatechange=f1;
c.xhr.send(null);
注:
true:异步
false:同步,发送请求时,浏览器会锁定当前页面,用户不能够对当前页面做其他操作。
发送post请求
a.xhr.open(‘post’,’check_uname.do’,true);
b.xhr.setRequestHeader(‘content-type’,’application/x-www-form-urlencoded’);
c.xhr.onreadystatechange=f1;
xhr.send(‘name=tom’);
注:按照HTTP协议规范,如果发送的是post请求,在请求的数据包里面,应该有content-type消息头。默认情况下,ajax对象不带该消息头,所以需要调用setRequestHeader方法来设置这个消息头。
step3 .编写服务器端的程序,
注:通常不需要返回完整的页面,只需要返回部分数据。
step4.编写事件处理函数
function fi(){
//先获得服务器返回的数据
if(xhr.readyState==4 && xhr.status==200){
var txt=xhr.resppnseText;
//利用这些数据(txt)更新页面
....
}
}
5.缓存问题
什么事缓存问题
当使用IE浏览器发送get请求时,浏览器会查看请求地址是否访问过,如果访问过,则不再发送新的请求,而是显示第一次访问的结果(也就是说,会将第一次的请求结果缓存下来)
如何解决
在请求地址后添加一个随机数。
xhr.open(‘get’,’getLucky.do?’+Math.random(),true);