And*_*rry 103 asp.net-mvc jquery getjson internet-explorer-8
我现在正在玩ASP.net MVC和JQuery.我遇到了似乎没有意义的行为.
我正在调用JQuery的$.getJSON
函数来填充一些div.该事件在事件中触发$(document).ready
.这非常有效.
有一个小的AJAX.BeginForm
,添加了在填充div时使用的另一个值.它正确调用远程函数,并在成功时调用原始的javascript函数来重新填充div.
这是奇怪的部分:在FireFox和Chrome中 - 一切正常.但是在IE8(Beta)中,对填充的Div脚本(调用$ .getJSON函数)的第二次调用会获取缓存数据,而不会询问服务器!
希望这个问题有道理:在坚果壳中 - 为什么要$.getJSON
获取缓存数据?为什么它只影响IE8?
Jit*_*til 106
这就是它对我有用的方式......
$.ajaxSetup({ cache: false });
$.getJSON("/MyQueryUrl",function(data,item) {
// do stuff with callback data
$.ajaxSetup({ cache: true });
});
Run Code Online (Sandbox Code Playgroud)
Nic*_*ico 67
只是为了让您知道,Firefox和Chrome认为所有Ajax请求都是不可缓存的.IE(所有版本)将Ajax调用视为其他Web请求.这就是你看到这种行为的原因.
如何强制IE在每个请求下载数据:
码:
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*rry 16
谢谢肯特的回答.使用$ .ajax('{cache:no}'); 工作得很好.[编辑]
或者至少我以为我做到了.似乎jquery $ .getJSON没有读取对$ .ajax对象所做的任何更改.
最终工作的解决方案是手动添加新参数
var noCache = Date();
$.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);
Run Code Online (Sandbox Code Playgroud)
日期解决方案仅限于分钟; 这实际上意味着这个解决方案仍然可以缓存长达一分钟.这对我来说是可以接受的.
Guy*_*Guy 11
我通过在Controller中的Action上放置以下属性来解决同样的问题:
[OutputCache(Duration = 0, VaryByParam = "None")]
Run Code Online (Sandbox Code Playgroud)