Ajax请求被缓存的几种处理方式

我们都知道IE会针对ajax请求的地址缓存请求结果,直到缓存过期之前,针对相同地址发出的请求,只有第一次会请求会真正发送到服务端.在某种情况下,这种缓存机制确实能提高web的响应速度,但是有时候并不是我们需要的,有时候我们需要获取即时信息,那么有哪几种方式来解决这个问题呢,下面列举了几种解决方案!

1.  通过URL添加后缀的方式

这种方式是我们大家都会使用的技巧,大多人都知道

例如:

本来请求的地址是: /home/action?

加查询参数后缀后:/home/action?ran=Match.Random();

后缀查询参数变量可以自定义,只需要每次都变化即可!

2. 通过Jquery的Ajax  API设置相关属性(代码中标红处)

<script type="text/javascript">
        var LoadTime = function () {
            $.ajaxSetup({ cache: false });
            $.ajax({
                url: ‘@Url.Action("currTime")‘,
                success: function (result) {
                    $("#currTime").html(result);
                }
            })
        }
</script>

.csharpcode,.csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff }
.csharpcode pre { margin: 0em }
.csharpcode .rem { color: #008000 }
.csharpcode .kwrd { color: #0000ff }
.csharpcode .str { color: #006080 }
.csharpcode .op { color: #0000c0 }
.csharpcode .preproc { color: #cc6633 }
.csharpcode .asp { background-color: #ffff00 }
.csharpcode .html { color: #800000 }
.csharpcode .attr { color: #ff0000 }
.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em }
.csharpcode .lnum { color: #606060 }

我们使用fiddler抓取url请求,会发现此种方式与第一种解决方案类似,也是添加后缀的方式,如图:

3. 通过定制响应(此处参考http://www.cnblogs.com/artech/archive/2013/01/03/cache-4-ie.html)

我们都知道http请求头重包请求的相关属性,此种方式通过控制消息头中的Cache-Control包头,并将其设置为”No-Cache”,这样只是浏览器不对结果缓存.

那么如何达到上述目的呢?

首先,我们定义一个名为NoCacheAttribute的ActionFilter.在实现的OnActionExecuted方法中,我们调用当前HttpResponse的SetCacheability方法将缓存选项设置为NoCache.将该属性应用到方法.然后运行我们的程序

先看NoCacheAttribute的定义:

public class NoCacheAttribute:FilterAttribute,IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        }
 
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //throw new NotImplementedException();
        }
    }

.csharpcode,.csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff }
.csharpcode pre { margin: 0em }
.csharpcode .rem { color: #008000 }
.csharpcode .kwrd { color: #0000ff }
.csharpcode .str { color: #006080 }
.csharpcode .op { color: #0000c0 }
.csharpcode .preproc { color: #cc6633 }
.csharpcode .asp { background-color: #ffff00 }
.csharpcode .html { color: #800000 }
.csharpcode .attr { color: #ff0000 }
.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em }
.csharpcode .lnum { color: #606060 }

将属性应用到方法

[NoCache]
 public string CurrTime() {
      return DateTime.Now.ToLongTimeString();
 }
 
通过fiddler查看请求头
如图,已达到了控制消息头的缓存选项.让浏览器不在混存请求
 

.csharpcode,.csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff }
.csharpcode pre { margin: 0em }
.csharpcode .rem { color: #008000 }
.csharpcode .kwrd { color: #0000ff }
.csharpcode .str { color: #006080 }
.csharpcode .op { color: #0000c0 }
.csharpcode .preproc { color: #cc6633 }
.csharpcode .asp { background-color: #ffff00 }
.csharpcode .html { color: #800000 }
.csharpcode .attr { color: #ff0000 }
.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em }
.csharpcode .lnum { color: #606060 }

原文地址:https://www.cnblogs.com/don-yang/p/9486211.html

时间: 2024-08-29 09:34:06

Ajax请求被缓存的几种处理方式的相关文章

IE浏览器重复提交ajax请求有缓存

1 IE浏览器发起ajax请求,其实只有第一次请求是成功的,后面的都自动中止,这是IE自带的缓存功能导致 2 若不需要次缓存功能,可以再请求地址中加一个随机参数 $.ajax({ url: "../../../ajax/ajaxtest.aspx", data: "cnum=" + cnum + "&canum=" + canum + "&tid=" + tid + "&r=" +

jsp中Get方式请求参数乱码的两种解决方式

第一种方式: <% //获取请求包含的下旬字符串 String rawQueryStr=request.getQueryString(); //使用URLDecoder解码祖父穿 String queryStr=URLDecoder.decode(rawQueryStr, "UTF-8"); //以&符号分解查询字符串 String paramPairs[]=queryStr.split("&"); for(String paramPair:p

[开源] jQuery 插件,利用‘localStorage’ 对 jQuery AJAX进行缓存,优化页面ajax请求

jquery-ajax-cache 源码地址:https://github.com/WQTeam/jquery-ajax-cache jQuery插件——利用‘localStorage’ 和 ‘sessionStorage’ 对 jQuery AJAX 请求进行缓存. 首先说明下在什么场景下需要用到缓存ajax请求到localstorage中.都知道浏览器本身对http请求就是有缓存策略的,但是这种缓存方式两个缺陷:1.只能缓存get请求 2.同时缓存的设置都在后端响应的报文头部指定.(PS:现

$.ajax,axios,fetch三种ajax请求的区别

Ajax是常用的一门与Web服务器通信的技术,目前发送Ajax请求的主要有4种方式: 原生XHR jquery中的$.ajax() axios fetch 至于原生的XHR目前工作中已经很少去手写它了,前些年我们比较常用的是jquery的ajax请求,但是近些年前端发展很快,jquery包装的ajax已经失去了往日的光辉,取而代之的是新出现的axios和fetch,两者都开始抢占“请求”这个前端重要领域.本文结合自己的使用经历总结一下它们之间的一些区别,并给出一些自己的理解. 1.Jquery

[开源]jquery-ajax-cache:快速优化页面ajax请求,使用localStorage缓存请求

项目:jquery-ajax-cache 地址:https://github.com/WQTeam/jquery-ajax-cache     最近在项目中用到了本地缓存localStorage做数据的缓存. 1.简单说下localStorage localStorage和cookies相比,在浏览器中存储的容量更大.另外最大的特点是不会附带在http请求中传给后台,不会像cookies一样导致http头部变大影响传输性能.基于这个原因,localStorage适合缓存一些常用的数据,无需平凡的

jquey的 ajax请求的几种方式

在jquery中,提供了集中方法来进行ajax操作 一.$.get(url,[data],[callback]) 向服务器发起get操作. 说明:url为请求地址,data为请求数据的列表(json对象),callback为请求成功后的回调函数,该函数接受两个参数,第一个为服务器返回的数据,第二个参数为服务器的状态,是可选参数. 二.$.getJSON(url,[data],[callback]) 向服务器发起get操作. 说明,对于get或getJSON方法,对服务器的返回数据格式要求有区别.

jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】

在做ajax页面无刷新添加的时候,IE下遭遇Ajax缓存,因为刚开始并不知道IE有这个坏毛病,折腾好久,终于解决问题.总结一下解决办法: 在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱,[即get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端,而post方式因为参数的不同,不会产生这个问题]而FF下不会出现这种情况.为了不受缓存影响,可以这样做: IE访问策略:Internet选项--浏览历史记录--设置-- Inter

Ajax请求 一般处理程序参数传递的几种方式

//第一种Ajax请求 $.ajax({ type:"GET", //请求类型,有get,post等类型,和表单提交是一样的 url:"Result.aspx", //请求处理的页面,就是说由那个页面捕获请求,同样这个路径可以换成ashx,一般处理程序 data: "name=John&location=Boston", //传递参数,实在就是(Result.aspx?name=John&loaciton=Boston) succ

清理浏览器网站缓存的几种方法(meta,form表单,ajax)

1.meta方法   HTML header中加入 <meta http-equiv="pragma" content="no-cache"> 说明:禁止浏览器从本地计算机的缓存中访问页面内容.上述设定,访问者将无法脱机浏览. <meta http-equiv="Cache-Control" content="no-cache,must-revalidate"> 说明:Cache-Control指定请求