当前位置:  开发笔记 > 编程语言 > 正文

$ .getJSON在IE8中返回缓存数据

如何解决《$.getJSON在IE8中返回缓存数据》经验,为你挑选了4个好方法。

我现在正在玩ASP.net MVC和JQuery.我遇到了似乎没有意义的行为.

我正在调用JQuery的$.getJSON函数来填充一些div.该事件在事件中触发$(document).ready.这非常有效.

有一个小的AJAX.BeginForm,添加了在填充div时使用的另一个值.它正确调用远程函数,并在成功时调用原始的javascript函数来重新填充div.

这是奇怪的部分:在FireFox和Chrome中 - 一切正常.但是在IE8(Beta)中,对填充的Div脚本(调用$ .getJSON函数)的第二次调用会获取缓存数据,而不会询问服务器!

希望这个问题有道理:在坚果壳中 - 为什么要$.getJSON获取缓存数据?为什么它只影响IE8?



1> Jitesh Patil..:

这就是它对我有用的方式......

$.ajaxSetup({ cache: false });
$.getJSON("/MyQueryUrl",function(data,item) {
     // do stuff with callback data
     $.ajaxSetup({ cache: true });
   });


对上面代码的一点警告 - 它包含竞争条件.因为调用及其响应是异步的,所以你应该在`getJSON()`之后调用`$ .ajaxSetup({cache:true});`而不是在回调中.

2> Nico..:

只是为了让您知道,Firefox和Chrome认为所有Ajax请求都是不可缓存的.IE(所有版本)将Ajax调用视为其他Web请求.这就是你看到这种行为的原因.
如何强制IE在每个请求下载数据:

如你所说,在JQuery中使用'cache'或'nocache'选项

向请求添加一个随机参数(丑陋,但工作:))

在服务器端,设置cachability(例如使用属性,见下文)

码:

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}



3> Andrew Harry..:

谢谢肯特的回答.使用$ .ajax('{cache:no}'); 工作得很好.[编辑]

或者至少我以为我做到了.似乎jquery $ .getJSON没有读取对$ .ajax对象所做的任何更改.

最终工作的解决方案是手动添加新参数

var noCache = Date();
$.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);

日期解决方案仅限于分钟; 这实际上意味着这个解决方案仍然可以缓存长达一分钟.这对我来说是可以接受的.


var noCache = new Date().getTime(); //会给你ms

4> Guy..:

我通过在Controller中的Action上放置以下属性来解决同样的问题:

[OutputCache(Duration = 0, VaryByParam = "None")]

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有