千家信息网

如何解决IE针对Ajax请求结果的缓存问题

发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,本篇文章给大家分享的是有关如何解决IE针对Ajax请求结果的缓存问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在默认情况下,IE会针
千家信息网最后更新 2024年10月21日如何解决IE针对Ajax请求结果的缓存问题

本篇文章给大家分享的是有关如何解决IE针对Ajax请求结果的缓存问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在默认情况下,IE会针对请求地址缓存Ajax请求的结果。换句话说,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端。在某些情况下,这种默认的缓存机制并不是我们希望的(比如获取实时数据)。

一、问题重现。

我们通过一个ASP.NET MVC应用来重现IE针对Ajax请求结果的缓存。在一个空ASP.NET MVC应用中我们定义了如下一个默认的HomeController,其中包含一个返回当前时间的Action方法GetCurrentTime。

 public class HomeController Controller {  public ActionResult Index()  {   return View();  }    public string GetCurrentTime()  {   return DateTime.Now.ToLongTimeString();  } }

默认Action方法Index对应的View定义如下。我们每隔5秒钟利用JQuery的方法以Ajax的方式调用GetCurrentTime操作,并将返回的结果显示出来。

      @ViewBag.Title               

    采用不同的浏览器运行该程序会得到不同的输出结果,如下图所示,Chrome浏览器中能够显示出实时时间,但是在IE中显示的时间都是相同的。

    二、通过为URL地址添加后缀的方式解决问题

    由于IE针对Ajax请求的返回的结果是根据请求地址进行缓存的,所以如果不希望这个缓存机制生效,我们可以在每次请求时为请求地址添加不同的后缀来解决这个问题。针对这个例子,我们通过如下的代码为请求地址添加一个基于当前时间的查询字符串,再次运行程序后IE中将会显示实时的时间。

                

    三、通过jQuery的Ajax设置解决问题

    实际上jQuery具有针对这个的Ajax设置,我们只需要按照如下的方式调用$.ajaxSetup方法禁止掉Ajaz的缓存机制。

                

    实际上jQuery的这个机制也是通过为请求地址添加不同的查询字符串后缀来实现的,这可以通过Fiddler拦截的请求来证实。

    四、通过定制响应解决问题

    我们可以通过请求的响应来控制浏览器针对结果的缓存,为此我们定义了如下一个名为NoCacheAttribute的ActionFilter。在实现的OnActionExecuted方法中,我们调用当前HttpResponse的SetCacheability方法将缓存选项设置为NoCache。该NoCacheAttribute特性被应用到GetCurrentTime方法后,运行我们的程序在IE中依然可以得到实时的时间。

    public class HomeController Controller {  public ActionResult Index()  {   return View();  }    [NoCache]   public string GetCurrentTime()  {   return DateTime.Now.ToLongTimeString();  } } public class NoCacheAttribute FilterAttribute, IActionFilter {  public void OnActionExecuted(ActionExecutedContext filterContext)  {   filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);  }   public void OnActionExecuting(ActionExecutingContext filterContext)  {} }

    实际NoCacheAttribute特性最终控制消息消息的Cache-Control报头,并将其设置为"no-cache",指示浏览器不要对结果进行缓存。如下所示的是针对GetCurrentTime请求的响应消息:

     HTTP/. OK Server ASP.NET Development Server/... Date Thu, Jan GMT X-AspNet-Version .. X-AspNetMvc-Version . Cache-Control no-cache  Pragma no-cache Expires - Content-Type text/html; charset=utf- Content-Length  Connection Close PM

    以上就是如何解决IE针对Ajax请求结果的缓存问题,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

    缓存 结果 问题 地址 方法 时间 不同 实时 机制 浏览器 浏览 后缀 实际 方式 消息 程序 应用 运行 相同 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器处理中啥意思 新世联 互联港湾网络技术 服务器开启ssl qq飞车服务器网络波动 移动公司参加网络安全宣传 国家863重点实验室网络安全 信息化少儿编程软件开发 免费创建服务器怎么启动这么慢 为啥我注册不了方舟服务器 论述汽车网络技术的发展趋势 加强网络安全监测值守工作 新能科技互联网医院 无锡常规软件开发信息推荐 数据库自增排序 戴尔r510服务器参数 违反网络安全法自我检讨书 软件开发人员价值评价体系 现在全国已经统计服务器是啥意思 空调自控系统有服务器吗 网络安全连笔字 车路协同网络技术将实现什么 无法登入埃尔登法环服务器 儿童手表服务器关闭了怎么办 三星手机数据库防水 软件开发合伙开公司怎么分配 IIS管理器搭捡代理服务器 数据库自增排序 互联网科技园电费 虹口区手机软件开发系统 软件开发合同争议
    0