it编程 > 前端脚本 > Ajax

浅析IE浏览器关于ajax的缓存机制

180人参与 2024-05-19 Ajax

ie浏览器对于同一个url只返回相同结果。因为,在默认情况下,ie会缓存ajax的请求结果。对于同一个url地址,在缓存过期之前,只有第一次请求会真正发送到服务端。大多数情况下,我们使用ajax是希望实现局部刷新的,所以这就牵扯到一个改进的问题。

  如果想每次都获取到最新数据,我们只需保证每次传入的url不一样。最简单的方法就是通过给url拼接参数。利用math函数的random()方法生成随机数。

  比如访问百度www.baidu.com,我们就可以把地址写成www.baidu.com?t=math.random();或者?t=new date().gettime();

  ********************************分割线**********************************

  说到这里,不妨复习一下ajax的基本用法。

*ajax创建对象:   

 var xmlhttp;
 if (window.xmlhttprequest){
  //ie7+, firefox, chrome, opera, safari
    xmlhttp = new xmlhttprequest();
  } else{
  //ie6, ie5
    xmlhttp=new activexobject("microsoft.xmlhttp");
  }  
           

*ajax请求:

//get请求:
xmlhttp.open("get","test1.txt",true);
xmlhttp.send();
//post请求:
xmlhttp.open("post","demo_post.asp",true);
xmlhttp.send();

get 还是 post?

与 post 相比,get 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 post 请求:

无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(post 没有数据量限制)
发送包含未知字符的用户输入时,post 比 get 更稳定也更可靠

*ajax响应:

要获得服务器的响应,需要使用xmlhttprequest 对象的 responsetext 或 responsexml 属性。

responsetext:获得字符串形式的响应数据。

document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext;

responsexml:获得xml形式的响应数据。

如果来自服务器的响应是 xml,而且需要作为 xml 对象进行解析。

*ajax - onreadystatechange : 

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readystate 改变时,就会触发 onreadystatechange 事件。

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

当 readystate 等于 4 且状态为 200 时,表示响应已就绪:

xmlhttp.onreadystatechange=function()
 {
 if (xmlhttp.readystate==4 && xmlhttp.status==200)
  {
  document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext;
  }
 }

补充:下面看下浅谈ajax解决浏览器的缓存问题

ajax能提高页面载入速度的主要原因是通过ajax减少了重复数据的载入,也即在载入数据的同时将数据缓存到内存中,一旦数据被加载,只要没有刷新页面,这些数据就会一直被缓存在内存中,当提交的url与历史的url一致时,就不需要提交给服务器,也即不需要从服务器获取数据,虽然降低了服务器的负载,提高了用户体验,但不能获取最新的数据。为了保证读取的信息都是最新的,需要禁止其缓存功能。

解决方案有如下几种:

① 在ajax发送请求前加上anyajaxobj.setrequestheader("if-modified-since", "0")。

② 在ajax发送请求前加上anyajaxobj.setrequestheader("cache-control", "no-cache")。

③ 在url后加上一个随机数:"fresh=" + math.random();。

④ 在url后加上时间搓:"nowtime=" + new date().gettime();。

⑤ 如果是使用jquery,则用$.ajaxsetup({cache:false})。这样页面的所有ajax都会执行该语句而不需要保存缓存记录。

总结

以上所述是小编给大家介绍的ie浏览器关于ajax的缓存机制,希望对大家有所帮助

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Fly拦截全局Ajax请求的方法

05-19

ajax异步读取后台传递回的下拉选项的值方法

05-19

Ajax引擎 ajax请求步骤详细代码

05-19

Ajax实现表格中信息不刷新页面进行更新数据

05-19

ajax实现页面的局部加载

05-19

爬取今日头条Ajax请求

05-19

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论