【问题标题】:Json is being cached incorrectlyJson 缓存不正确
【发布时间】:2011-05-24 18:50:22
【问题描述】:

喂!

我的 JS 正在从控制器请求 JSON 来编辑现有对象,即填充的下拉列表。

然后,视图从我的自动建议下拉列表中发送实际值,以便最近将新值与旧值进行比较并存储新值。

它就像一个人员列表。当我加载页面时,我的 ddl 中有一些人,我可以添加或删除人员。

这是我的控制器:

    [HttpGet]
    public JsonResult JSON(int order)
    {
        IEnumerable<Person> persons = dataServ.Envolvidos.GetPerson( order )
        return this.Json( new { Result = persons }, JsonRequestBehavior.AllowGet );
    }

还有我的 Json 调用:

$.getJSON("/Order/JSON", { order: $("#Id").val() }, function (data) {
   ...
});

一切都很好,除了 I.E.正在缓存这个 JSON,当我发送新值并再次返回编辑页面时,旧值而不是新值在那里。但是新值应该存储在数据库中。

我在 Chrome 和 Firefox 上进行了测试,在我编辑并再次进行编辑后,它完成了一个新的 json 调用,并且新的值在那里,与 I.E. 不同

我错过了什么吗? JSON结果不被缓存怎么办?

【问题讨论】:

    标签: json caching asp.net-mvc-3 internet-explorer-9 autosuggest


    【解决方案1】:

    这将禁用 jQuery ajax 的缓存:

    jQuery.ajaxSetup({ cache: false });
    

    【讨论】:

    • 是否缓存通常最好留给为数据提供服务的服务,因为它知道数据过时多久。此解决方案将强制服务的所有客户端将此行放入其客户端代码中。如果这不可接受,则需要修改服务以在其响应中包含适当的标头,以向客户端指示它们不应缓存。
    • @Gweebz。服务器端和客户端缓存是完全不同的。在这种情况下,没有人会强迫客户这样做。恰好IE客户端比其他客户端更喜欢缓存,所以IE需要这行代码。服务器端缓存可以而且应该独立于该决定进行配置。至于使用服务器端创建的标头控制客户端缓存,我看不出有什么好处。它只会在您自己认为不好的服务器端代码和客户端代码之间创建紧密耦合。
    • 关于这个更深入的讨论,任何人都可以参考这里:dotnet.dzone.com/articles/output-caching-aspnet-mvc
    【解决方案2】:

    我相信 IE 默认缓存 JSON 请求,这与其他浏览器不同。您将不得不手动包含适当的标头来告诉响应不要被缓存。这不会伤害已经不缓存的现有浏览器,它只会更加明确。

    【讨论】:

    • +1 这应该是正确的答案。用于缓存的 HTTP 规范是针对源如何希望其内容在缓存方面进行管理的。在 javascript 中更改它不会改变中间缓存代理的工作方式。所以最好的办法是在服务器上指定正确的无缓存标头,以便它在所有情况下都有效。
    猜你喜欢
    • 2020-05-21
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多