Ajax页面缓存问题分析与解决办法

一、什么是Ajax缓存原理?

Ajax在发送的数据成功后,会把请求的URL和返回的响应结果保存在缓存内,当下一次调用Ajax发送相同的请求时,它会直接从缓存中把数据取出来,这是为了提高页面的响应速度和用户体验。当前这要求两次请求URL完全相同,包括参数。这个时候,浏览器就不会与服务器交互。

二、Ajax缓存的好处

这种设计使客户端对一些静态页面内容的请求,比如图片,css文件,js脚本等,变得更加快捷,提高了页面的响应速度,也节省了网络通信资源。

三、Ajax缓存的不足

Ajax缓存虽然有上述的好处,但是如果通过Ajax对一些后台数据进行更改的时候,虽然数据在后台已经发生改变,但是页面缓存中并没有改变,对于相同的URL,Ajax提交过去以后,浏览器还只是简单的从缓存中拿数据,这种情况当然就不行了。

四、解决Ajax缓存问题的方法

解决这个问题最有效的办法是禁止页面缓存,有以下几种处理方法:

1.在ajax发送请求前加上 xmlHttpRequest.setRequestHeader(“Cache-Control”,”no-cache”);

2.在服务端加 header(“Cache-Control: no-cache, must-revalidate”);

3.在ajax发送请求前加上 xmlHttpRequest.setRequestHeader(“If-Modified-Since”,”0″);

补充

4、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了

5、第五种方法和第四种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime();

6、用POST替代GET:不推荐

1jQuery提供一个防止ajax使用缓存的方法,

<!--

<script type="text/javascript" language="javascript">
$.ajaxSetup ({
cache: false //close AJAX cache
});
</script>

第二就是修改load 加载的url地址

 

例如 再url 多加个时间参数就可以 这个方法再wap1.0 中 我也用过避免读取缓存

<!--

function loadEventInfoPage(eventId){

    $.ajaxSetup ({
       cache: true // AJAX cache  下面加上时间后load的页面中的js、css图片等都会重新加载,   

         //加上这句action会重新加载,但是js、css、图片等会走缓存
    });
    $("#showEventInfo").load(ctx + "/custEvents/viewEvent.action",
                    {"complaint.Id":eventId, "tt":(new Date()).getTime()},function(){})
}

第三种、设置html的缓存

<!--

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">   
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">   
<META HTTP-EQUIV="Expires" CONTENT="0">

时间: 2025-01-21 08:40:55

Ajax页面缓存问题分析与解决办法的相关文章

AJAX页面参数相同时只返回缓存的内容的解决办法

AJAX页面参数相同时只返回缓存的内容的解决办法 常利用AJAX写一些页面无刷新的内容获取页面,这种方式很快捷也很方便,但其中有一个问题,就是如果两次提交的参数相同时,返回的内容只返回上次获取的内容,如果我们在第一次修改了参数,第二次再次调用却会发现页面根本没有改变.这样的情况是是为AJAX获取时先检查本机缓存,如果本机缓存已有相同内容,则不访问远端服务器.这样的操作倒是可以提高速度和减少服务器压力.但带来的弊端也是显而易见的. 为了解决这个问题.我们必须在获取页加上一个额外的参数.比较简单的方

Ajax传输中文乱码问题的解决办法_AJAX相关

AJAX简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. ajax传输中文乱码问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,aj

后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法_AngularJS

1.问题: 后端接收不到AngularJs中$http.post发送的数据,总是显示为null 示例代码: $http.post(/admin/KeyValue/GetListByPage, { pageindex: 1, pagesize: 8 }) .success(function(){ alert("Mr靖"); }); 代码没有错,但是在后台却接收不到数据,这是为什么呢? 用火狐监控:参数是JSON格式 用谷歌监控:传参方式是request payload 可以发现传参方式是

网站首页被百度K掉降权原因分析及解决办法

中介交易 SEO诊断 淘宝客 云主机 技术大厅 做seo的朋友都会遇到网站首页被百度K掉的时候,让人非常苦恼.因为平常对于企业网站优化来说,首页的关键词是整个网站主要关键词流量的来源.所以在做网站推广过程中遇到这样的问题都会让相关工作人员心急如焚.这里icp66网站建设工作室总结了一下网站首页被百度K掉或者是降权的原因以及处理方法. 网站首页被百度K掉降权原因分析及解决办法 网站首页过度优化:网站首页滥用优化标签,网站首页满篇的使用h标签或者着重和加强标签.导致百度搜索引擎认为是故意在seo优化

Ajax传输中文乱码问题的解决办法

AJAX简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. ajax传输中文乱码问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,aj

笔记本电池充不了电的四种原因分析和解决办法

  笔记本电池充不了电的四种原因分析和解决办法.不少网友会问,笔记本电池充不进电的原因是什么?笔记本电池不充电怎么办?笔记本电池不充电的4种原因分别是电源适配器故障,电池故障,主板故障,电路故障.那么我们该如何解决笔记本电池不充电这个问题呢? 一:电源适配器故障 电源适配器有很多朋友称之为充电器,虽然不够准确,但也确实很形象.判断是不是由于电源引起的不充电也很简单,替换法就可以.这种故障在DELL笔记本维修中多见,DELL笔记本采用LBK(DELL架構),充电电路设计比较特别,适配器如果出现问题

导致MyEclipse内存不足的原因分析及解决办法_java

1.修改eclipse.ini 在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一个myeclipse.ini配置文件,设置如下: -vmargs -Xmx512m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m 2.设置Default VM Arguments 在myEclipse中,打开Windows-> Preferences->Java->Installed JREs

PHP中ID设置自增后不连续的原因分析及解决办法_php实例

PHP中ID设置自增后不连续的原因分析如下所述: alter table tablename drop column id; alter table tablename add id mediumint(8) not null primary key auto_increment first; 每次删除把这两行家伙加上就行了 还有就是这个 使用mysqli对象中的query()方法每次调用只能执行一条SQL命令. 如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_que

php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法_php实例

今天遇到GD的resizeimage 函数处理jpg后缀文件的缩略图的时候 提示该图片不是合法的jpg图片并报错 <b>Warning</b>: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Invalid SOS parameters for sequential JPEG 国内网上查了很多资料也没找到有效的解决办法,原来只要把 GD的jpeg文件支持打开即可解决 ini_set('gd.jpeg_igno