浅析IE浏览器关于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都会执行该语句而不需要保存缓存记录。
您可能感兴趣的文章
- 01-22JavaScript中如何实现AJAX请求数据并有效格式化输出的最佳实践?
- 01-22如何轻松实现AJAX获取数据并高效展示于网页界面?
- 01-22如何高效实现AJAX数据直接赋值给页面元素而无需额外步骤?
- 01-22JSP后台获取前台Ajax传递值的具体实现步骤是怎样的?
- 01-22如何高效地在HTML中运用Ajax技术精准请求数据库信息?
- 01-22如何高效实现将AJAX获取的数据转换为动态HTML展示的最佳实践?
- 01-22在Ajax调用数据库数据时,有哪些关键步骤和常见问题需要注意?
- 01-22如何高效使用Ajax技术精准读取数据库中的数据表信息?
- 01-22在Ajax请求中,如何实现返回多个嵌套数组对象的数据结构?
- 01-22AJAX技术中,如何准确获取并识别服务器数据库中的数据类型?
阅读排行
- 1JavaScript中如何实现AJAX请求数据并有效格式化输出的最佳实践?
- 2如何轻松实现AJAX获取数据并高效展示于网页界面?
- 3如何高效实现AJAX数据直接赋值给页面元素而无需额外步骤?
- 4JSP后台获取前台Ajax传递值的具体实现步骤是怎样的?
- 5如何高效地在HTML中运用Ajax技术精准请求数据库信息?
- 6如何高效实现将AJAX获取的数据转换为动态HTML展示的最佳实践?
- 7在Ajax调用数据库数据时,有哪些关键步骤和常见问题需要注意?
- 8如何高效使用Ajax技术精准读取数据库中的数据表信息?
- 9在Ajax请求中,如何实现返回多个嵌套数组对象的数据结构?
- 10AJAX技术中,如何准确获取并识别服务器数据库中的数据类型?
推荐教程
- 04-29浅析IE浏览器关于ajax的缓存机制
- 09-12同源策略真的是Web安全的绝对防线吗?
- 06-15解决Ajax方式上传文件报错"Uncaught TypeError: Illeg
- 04-29ajax异步读取后台传递回的下拉选项的值方法
- 10-29ajax实现页面的局部加载
- 05-29Ajax请求跨域问题解决方案分析
- 04-29在layer弹出层中通过ajax返回html拼接字符串填充数据的方法
- 04-09Ajax验证用户名是否存在的实例代码
- 11-29Ajax实现表格中信息不刷新页面进行更新数据
- 10-19爬取今日头条Ajax请求
