AJAX的原理-如何做到异步和局部刷新
来源:互联网 发布:iis配置网站对应域名 编辑:程序博客网 时间:2024/06/11 07:16
先来看如下一段代码:
//当readystate的值发生变化时调用handleRequest回调函数XMLHttpReq.onreadystatechange =handleRequest;XMLHttpReq.open("get","http://localhost:8080/test/register.jsp?username="+userName, true);XMLHttpReq.send(null);
onreadystatechange被回调函数赋值,则能实现异步调用,回调函数直接操作DOM,则能实现局部刷新。那么XMLHttpRequest的onreadystatechange如何知道服务ready了呢?则是通过客户端对服务的状态询问(定期轮询)所实现的。
那么服务器到底在什么时候会查看onreadystatechange属性并去调用指定的回调方法呢?这就要取决于XMLHttpRequest对象的另外一个属性readyState了。readyState表示了当前的请求状态,可以的状态有5个,如表所示。
readyState的属性值
readyState取值
描述
0
请求没有发出,表示open方法还没有开始调用
1
请求已经建立但还没有发送出去。表示open方法已经调用,但还没有调用send()方法。
2
请求已经发出,正在处理中。表示send方法已经调用。
3
请求已经处理,正在接收服务器的数据。
4
响应已经完成,数据接收成功。
在整个请求过程中,onreadystatechange属性指定的回调方法在每一次readystate值改变时都会被调用。当XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问(类似于客户端会轮询服务器的返回状态,仍然是http短连接,并非长连接的服务器端push)请求状态,如果一切已经就绪(status=200),那么就执行需要的操作。
操作一般就是直接操作DOM,所以AJAX能做到所谓的“无刷新”用户体验。
document.getElementById("user1").innerHTML = "数据正在加载..."; if (xmlhttp.status == 200) { document.write(xmlhttp.responseText); }
2. 那么在AJAX客户端如何做到的异步呢?实际上就是Javascript的回调函数起的作用一旦服务器处理完XmlHttpRequest并返回给浏览器,使用req.onreadystatechange指派所设置的回调方法将被自动调用。
在回调方法中,一般需要对服务器的状态进行判定,只有readyState的值为4时才表示服务器响应已经完成,可以使用响应的数据了。
function handleRequest(){ if(XMLHttpReq.readyState==4){ //请求完毕的处理代码} }但是这里就会出现一个问题,如果服务器响应请求并完成了处理(即readyState的值为4),但是却产生了一个错误,返回的结果并不是预期的结果。这时候就需要在回调方法中检测XMLHttpRequest对象中的status属性值,它记录了服务器端返回的http请求响应状态,如200,表示请求成功,404表示请求资源没有找到,500表示内部服务器错误等。
function handleRequest(){ if(XMLHttpReq.readyState==4){ if(XMLHttpReq.status==200){ //请求完毕并能返回了预期的数据}} }
1:在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上t=Math.random()
当然,不是直接把t=Math.random()拷贝到URL后面,应该像这样:URL+"&"+"t="+Math.random();
2:在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);
第二种方法感觉挺好
- AJAX的原理-如何做到异步和局部刷新
- AJAX的原理-如何做到异步和局部刷新
- JS与Ajax实现异步局部刷新的原理
- .net中使用Ajax做到局部刷新
- ajax在JavaScript的使用:异步传输,局部刷新
- ajax如何实现局部刷新
- jQuery Ajax异步刷新局部页面
- 第三阶段-Ajax异步局部刷新
- ajax异步加载 实现局部刷新
- JQuery与Ajax实现异步局部刷新
- ajax异步请求,生成表格,局部刷新
- ajax,jquery,$.post/$.get异步刷新div,局部刷新页面
- Ajax实现局部刷新和异步处理简单应用(实现简单注册验证)
- Ajax局部页面刷新和history的坑
- j2ee中运用ajax局部刷新和实时局部刷新
- Ajax:如何运用updatepanle进行局部刷新
- AJAX.NET 异步调用实现局部刷新CS代码解读
- struts也可以使用ajax异步调用页面局部刷新
- eclipse快捷键
- android中webview播放swf格式的视频
- 智能家居行业热闹,但并不好“玩”儿
- myeclipse下查看jdk的安装位置
- iPhone开发 构建View 时用到代理函数调用顺序 图解
- AJAX的原理-如何做到异步和局部刷新
- MyEclipse10.X项目分类管理
- LABC and CABC-MTK Platform
- 屏幕效果设置中CABC功能介绍
- 【Android开发】之Fragment开发1
- CSS3----动画animation
- 数据结构学习15:线性表
- WebStorm 开发工具,js或html5开发的不二之选
- PopUpManager的createPopUp与addPopUp区别