$ .getJSON在IE8中返回caching的数据
我现在正在玩ASP.net MVC和JQuery。 我遇到了似乎没有道理的行为。
我调用JQuery的$.getJSON
函数来填充一些div。 $(document).ready
事件触发事件。 这完美的作品。
有一个小的AJAX.BeginForm
增加了填充div时使用的另一个值。 它正确调用远程函数,并成功调用原来的JavaScript函数重新填充div。
这是怪异的部分:在FireFox和Chrome – 一切正常。 但在IE8(testing版)第二次调用填充的Div脚本(它调用$ .getJSON函数)获取caching的数据,并不要求服务器!
希望这个问题是有道理的:在一个坚果shell – 为什么$.getJSON
获得caching的数据? 而为什么它只影响IE8?
只是为了让您知道,Firefox和Chrome将所有的Ajax请求视为不可caching的。 IE(所有版本)都像其他Web请求一样处理Ajax调用。 这就是为什么你看到这种行为。
如何强制IE在每个请求下载数据:
- 正如你所说,使用JQuery中的“caching”或“nocache”选项
- 向请求中添加一个随机参数(丑陋,但工作:))
- 在服务器端,设置cachability(例如使用属性,见下文)
码:
public class NoCacheAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext context) { context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); } }
这是对我的工作…
$.ajaxSetup({ cache: false }); $.getJSON("/MyQueryUrl",function(data,item) { // do stuff with callback data $.ajaxSetup({ cache: true }); });
感谢肯特你的答案。 使用$ .ajax('{cache:no}'); 完美的工作。 [编辑]
或者至less我以为我做到了。 似乎jQuery $ .getJSON不读取对$ .ajax对象所做的任何更改。
结束工作的解决scheme是手动添加一个新的参数
var noCache = Date(); $.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);
date分辨率只是一分钟; 这实际上意味着这个解决scheme仍然可以caching一分钟。 这是我的目的可以接受的。
我通过在控制器的Action中放置以下属性来解决同样的问题:
[OutputCache(Duration = 0, VaryByParam = "None")]
如果您使用的是ASP.net MVC,请考虑添加一个扩展方法来轻松实现不caching,如下所示:
public static void NoCache(this HttpResponse Response) { Response.Cache.SetNoStore(); Response.Cache.SetExpires(DateTime.MinValue); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetValidUntilExpires(false); Response.Expires = -1; Response.ExpiresAbsolute = DateTime.MinValue; Response.AddHeader("Cache-Control", "no-cache"); Response.AddHeader("Pragma", "no-cache"); }
您可能需要发送caching断路器。
我build议使用$ .ajax({cache:no})以防万一(向获取请求添加一个随机后缀)
(我倾向于使用$ .ajax这些天到处,更可调)
准备好了吗?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
所以,只需添加
jQuery.support.cors = true;
在你的脚本开始和爆炸它的作品!
- 关于jqGrid列标题filter和高级过滤对话框的两个相关问题
- 重写一个静态方法
- 在Asp.Net MVC 5中获取login用户的用户名
- 在asp.net mvc上使用angular度js的好处
- 在Ajax调用中处理会话超时
- 将JsonRequestBehavior设置为AllowGet时,可以披露什么“敏感信息”
- 如何解决:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误的模块“ManagedPipelineHandler”
- MVC ASP.NET中的HttpContext.Current和Controller.Context之间的区别
- 值不能为空。 参数名称:值,CreateIdentityAsync?