Json被错误地缓存了

Thi*_*ago 14 json caching autosuggest internet-explorer-9 asp.net-mvc-3

海兰!

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

然后,View从我的autosuggest下拉列表中发送实际值,最近将新值与旧值进行比较,并存储新值.

它就像人员名单.当我加载页面时,我的ddl中有一些人,我可以添加或删除人.

这是我的控制器:

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

而我的Json电话:

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

一切都很顺利,除了IE正在缓存这个JSON,当我发送新值并再次返回编辑页面时,旧的值不是新的.但是新值存储在数据库中,应该是这样.

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

我错过了什么吗?我应该对JSON结果做什么不进行缓存?

Mil*_*ric 20

这将禁用jQuery ajax的缓存:

jQuery.ajaxSetup({ cache: false });
Run Code Online (Sandbox Code Playgroud)

  • @Gweebz.服务器端和客户端缓存是完全不同的.在这种情况下,没有人强迫客户这么做.只是IE客户端比其他客户端更喜欢缓存,所以IE需要这行代码.服务器端缓存可以而且应该独立于此决策进行配置.至于使用服务器端创建的头控制客户端缓存,我没有看到好处.它只会在服务器和客户端代码之间建立紧密耦合,你自己认为这很糟糕. (4认同)

Jes*_*ebb 8

我相信默认情况下IE会缓存JSON请求,这与其他浏览器不同.您必须手动包含适当的标头,以告知响应不被缓存.这不会伤害已经不缓存的现有浏览器,它只会更加明确.