ajax清除缓存问题

来源:互联网 发布:调查问卷分析软件 编辑:程序博客网 时间:2024/05/19 22:49
在ajax的应用中,当用户访问一次后,再进行访问当XMLHttpRequest请求不变的时,在ie中会出现这样的现象,那就是取数据不会到服务器端取,而是直接从ie的缓存中取,则会就是ie的缓存问题。在ajax中解决缓存的问题采用时间戳的方式,即为每个XNLHttpRequest请求后面加一个时间戳的标志,从而保证每次请求都是新的从而解决ie缓存问题,下面是简单的例子。
1、关键的代码如下:
Java代码
  1. //给url地址增加时间戳,骗过浏览器,不读取缓存    
  2. function convertURL(url) {    
  3.         //获取时间戳    
  4.         var timstamp = (new Date()).valueOf();    
  5.         //将时间戳信息拼接到url上    
  6.         //url = "AJAXServer"    
  7.         if (url.indexOf("?") >= 0) {    
  8.                 url = url + "&t=" + timstamp;    
  9.         } else {    
  10.                 url = url + "?t=" + timstamp;    
  11.         }    
  12.         return url;    
  13. }  
下面是简单的例子,验证用户点击了验证按钮几次的例子
1、首先看js的代码
Java代码
  1. function verify() {    
  2.       //通过jquery方式获取页面文本框中的数值    
  3.         var url = "AJAXServer?name=" + encodeURI(encodeURI($("#userName").val()));    
  4.         //通过convertURL对传入的数值做特殊处理,使每个数据都带有一个时间戳,从而产生不同的XHTTPRequest请求   
  5.         url = convertURL(url);    
  6.         //调用jquery中的get请求方法向服务器端传值,定义一个回调函数在页面显示服务器端返回的数据   
  7.         $.get(url,null,function(data){    
  8.                 $("#result").html(data);    
  9. });    
  10. }    
  11. //给url地址增加时间戳,骗过浏览器,不读取缓存    
  12. function convertURL(url) {    
  13.         //获取时间戳    
  14.         var timstamp = (new Date()).valueOf();    
  15.         //将时间戳信息拼接到url上    
  16.         //url = "AJAXServer"    
  17.         if (url.indexOf("?") >= 0) {    
  18.                 url = url + "&t=" + timstamp;    
  19.         } else {    
  20.                 url = url + "?t=" + timstamp;    
  21.         }    
  22.         return url;    
  23. }   
Java代码
  1. 2、简单的html验证页面代码如下:   
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    
  3.                 "http://www.w3.org/TR/html4/loose.dtd">    
  4. <html>    
  5. <head>    
  6.     <title>用户名校验ajax实例</title>    
  7.     <!--<meta http-equiv="content-type" content="text/html; charset=gb2312" />-->    
  8.     <script type="text/javascript" src="jslib/jquery.js"></script>    
  9.     <script type="text/javascript" src="jslib/verify.js"></script>    
  10. </head>    
  11. <body>    
  12.         <!--ajax方式下不需要使用表单来进行数据提交,因此不用写表单标签-->    
  13.         <!--ajax方式不需要name属性,需要一个id的属性-->    
  14.         <input type="text" id="userName" />    
  15.         <input type="button" value="校验" onclick="verify()"/>    
  16.         <!--这个div用于存放服务器段返回的信息,开始为空-->    
  17.         <!--id属性定义是为了利用dom的方式找到某一个节点,进行操作-->    
  18.         <div id="result"></div>    
  19. </body>    
  20. </html>3、服务器端得javaservlet代码   
  21. public class AJAXServer extends HttpServlet{    
  22.   
  23.         protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {    
  24.                 doGet(httpServletRequest, httpServletResponse);    
  25.         }    
  26.   
  27.         protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {    
  28.                 try{    
  29.   
  30.                         httpServletResponse.setContentType("text/html;charset=utf-8");    
  31.                         PrintWriter out = httpServletResponse.getWriter();    
  32.   
  33.                         Integer inte = (Integer) httpServletRequest.getSession().getAttribute("total");    
  34.                         int temp = 0;    
  35.                         if (inte == null) {    
  36.                                 temp = 1;    
  37.                         } else {    
  38.                                 temp = inte.intValue() + 1;    
  39.                         }    
  40.                         httpServletRequest.getSession().setAttribute("total",temp);    
  41.   
  42.                         //1.取参数    
  43.                         String old = httpServletRequest.getParameter("name");    
  44.                         String name = URLDecoder.decode(old,"UTF-8");    
  45.                         //2.检查参数是否有问题    
  46.                         if(old == null || old.length() == 0){    
  47.                                 out.println("用户名不能为空");    
  48.                         } else{    
  49.                                 //3.校验操作    
  50. //                                String name = old;   
  51.                                 if(name.equals("wangxingkui")){    
  52.                                         //4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户   
  53.                                         //写法没有变化,本质发生了改变   
  54.                                         out.println("用户名[" + name + "]已经存在,请使用其他用户名, " + temp);    
  55.                                 } else{    
  56.                                         out.println("用户名[" + name + "]尚未存在,可以使用该用户名注册, " + temp);    
  57.                                 }    
  58.                         }    
  59.                 } catch(Exception e){    
  60.                         e.printStackTrace();    
  61.                 }       
  62.         }    
  63. }  
原创粉丝点击