jQuery调用Ajax高效缓存.docx_第1页
jQuery调用Ajax高效缓存.docx_第2页
jQuery调用Ajax高效缓存.docx_第3页
jQuery调用Ajax高效缓存.docx_第4页
jQuery调用Ajax高效缓存.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jQuery调用Ajax高效缓存【IT168技术】尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议。首先要做的事情是在服务器端 支持HTTP GET,定义不同的URL输出不同的数据(MVC里对应的就是action)。如果要使用同一个地址获取不同的数据,那就不对了,一个HTTP POST也不行因为POST不能被缓存。许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时 候可以被入侵)。缓存解释jQuery全局对象里的ajax方法提供了一些options来支持缓存和Conditional GETs功能。$.ajax(ifModified: true|false,cache: true|false,);ifModified选项定义的是在ajax调用的时候是否支持Conditional GETs功能。jQuery会自动帮我们处理服务器端 返回的名为Last-Modified的header值,然后在随后的请求里的header里发送If-Modified-Since。这需要我们的 MVC Controller要实现Conditional GETs功能才能用。Conditional GETs功能在http缓存上下文中用于重新验证缓存中过期的条目。如果jQuery认为一个条目已经过期了,它首先会请求服务器使用 Conditional GETs功能重新验证该条目,如果服务器返回状态码304(Not modified),jQuery会重新使用缓存里的该项目,这样的话,我们可以节约很多流量去下载页面内容。cache选项基本上是 覆盖服务器端返回的http header里的所有关于缓存的设置,如果设置cache选项为false的话,jQuery会在请求的URL后面附件一个时间戳,以便区分之前的URL 地址,这样没错请求的内容都是最新的,也就是说浏览器每次接收的都是新地址,自然返回的都是最新数据。让我们来看几个场景:服务器端响应里设置No-Cache服务器端为王,如果服务器端明确定义了response响应不能被缓存的话,jQuery也无能为力。ajax里的cache选项将被忽略。JS代码:$(#nocache).click(function () $.ajax(url: /Home/NoCache,ifModified: false,cache: true,success: function (data, status, xhr) $(#content).html(data.count);););C#代码:public ActionResult NoCache()/ 禁用缓存Response.Cache.SetCacheability(HttpCacheability.NoCache);return Json(new count = Count+ , JsonRequestBehavior.AllowGet);服务器端响应里设置过期时间服务器端设置过期时间用于缓存数据,该条目在客户端将依据过期时间被缓存。JS代码:$(#expires).click(function () $.ajax(url: /Home/Expires,ifModified: false,cache: true,success: function (data, status, xhr) $(#content).html(data.count);););C#代码:public ActionResult Expires()Response.Cache.SetExpires(DateTime.Now.AddSeconds(5);return Json(new count = Count+ , JsonRequestBehavior.AllowGet);客户端从来不缓存数据客户端决定每次都要最新的数据(不能使用缓存),也就是说ajax里的cache选项设置为false,不管服务器端如何定义,jQuery每次请求的URL地址都是唯一不同的,目的是每次都获取最新的内容。JS代码:$(#expires_nocache).click(function () $.ajax(url: /Home/Expires,ifModified: false,cache: false, / 这里是关键success: function (data, status, xhr) $(#content).html(data.count);););C#代码:public ActionResult Expires()/ 不管服务器端怎么设置都没用Response.Cache.SetExpires(DateTime.Now.AddSeconds(5);return Json(new count = Count+ , JsonRequestBehavior.AllowGet);服务器端和客户端使用Conditional Gets功能验证缓存数据客户端将条目放在缓存里,在过期之后重新验证。服务器端必须实现Conditional GET功能(使用ETags或者last modified的header)。JS代码:$(#expires_conditional).click(function () $.ajax(url: /Home/ExpiresWithConditional,ifModified: true, / 这里是关键cache: true,success: function (data, status, xhr) $(#content).html(data.count);););C#代码:public ActionResult ExpiresWithConditional()if (Request.HeadersIf-Modified-Since != null & Count % 2 = 0)return new HttpStatusCodeResult(int)HttpStatusCode.NotModified);Response.Cache.SetExpires(DateTime.Now.AddSeconds(5);Response.Cache.SetLastModified(DateTime.Now);return Json(new count = Coun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论