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

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

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

1.  经过URL添加后缀的方式css

这种方式是咱们你们都会使用的技巧,大多人都知道html

例如:java

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

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

后缀查询参数变量能够自定义,只须要每次都变化便可!ajax

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>

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

fiddler2

 

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();
        }
    }

将属性应用到方法

[NoCache]
 public string CurrTime() {
      return DateTime.Now.ToLongTimeString();
 }
 
经过fiddler查看请求头
fiddler2
如图,已达到了控制消息头的缓存选项.让浏览器不在混存请求
 
分类: asp.net
0
0
« 上一篇: 说说字符编码
» 下一篇: Asp.net获取网站绝对路径的几种方法
posted @ 2013-07-28 16:31 竹影木风 阅读( 4912) 评论( 0) 编辑 收藏
相关文章
相关标签/搜索