资源描述:
《jQuery调用Ajax高效缓存》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、jQuery调用Ajax高效缓存 【IT168 技术】尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议。 首先要做的事情是在服务器端支持HTTPGET,定义不同的URL输出不同的数据(MVC里对应的就是action)。如果要使用同一个地址获取不同的数据,那就不对了,一个HTTPPOST也不行因为POST不能被缓存。许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候可以被入侵)。 缓存解释 jQuery全局对象里的ajax
2、方法提供了一些options来支持缓存和ConditionalGETs功能。 $.ajax({ ifModified:[true
3、false], cache:[true
4、false], }); ifModified选项定义的是在ajax调用的时候是否支持ConditionalGETs功能。jQuery会自动帮我们处理服务器端返回的名为Last-Modified的header值,然后在随后的请求里的header里发送If-Modified-Since。这需要我们的MVCController要实现ConditionalGETs功能才能用。C
5、onditionalGETs功能在http缓存上下文中用于重新验证缓存中过期的条目。如果jQuery认为一个条目已经过期了,它首先会请求服务器使用ConditionalGETs功能重新验证该条目,如果服务器返回状态码304(Notmodified),jQuery会重新使用缓存里的该项目,这样的话,我们可以节约很多流量去下载页面内容。 cache选项基本上是覆盖服务器端返回的httpheader里的所有关于缓存的设置,如果设置cache选项为false的话,jQuery会在请求的URL后面附件一个时间戳,以便区分之前的URL地址,这样没错请求的
6、内容都是最新的,也就是说浏览器每次接收的都是新地址,自然返回的都是最新数据。 让我们来看几个场景: 服务器端响应里设置No-Cache 服务器端为王,如果服务器端明确定义了response响应不能被缓存的话,jQuery也无能为力。ajax里的cache选项将被忽略。 JS代码:$('#nocache').click(function(){ $.ajax({ url:'/Home/NoCache', ifModified:false, cache:true, success:function(data,status,xhr){
7、 $('#content').html(data.count); } }); }); C#代码:publicActionResultNoCache() { //禁用缓存 Response.Cache.SetCacheability(HttpCacheability.NoCache); returnJson(new{count=Count++},JsonRequestBehavior.AllowGet); } 服务器端响应里设置过期时间 服务器端设置过期时间用于缓存数据,该条目在客户端将依据过期时间被缓存。 JS代码
8、:$('#expires').click(function(){ $.ajax({ url:'/Home/Expires', ifModified:false, cache:true, success:function(data,status,xhr){ $('#content').html(data.count); } }); }); C#代码:publicActionResultExpires() { Response.Cache.SetExpires(DateTime.Now.AddSeconds(5)); r
9、eturnJson(new{count=Count++},JsonRequestBehavior.AllowGet); } 客户端从来不缓存数据 客户端决定每次都要最新的数据(不能使用缓存),也就是说ajax里的cache选项设置为false,不管服务器端如何定义,jQuery每次请求的URL地址都是唯一不同的,目的是每次都获取最新的内容。 JS代码:$('#expires_nocache').click(function(){ $.ajax({ url:'/Home/Expires', ifModified:false, c
10、ache:false,//这里是关键 success:function(data,status,xhr){ $('#content').html(