【问题标题】:Is there any reason this ajax call would be cached on my asp.net-mvc site?这个 ajax 调用是否有任何理由缓存在我的 asp.net-mvc 站点上?
【发布时间】:2013-09-20 20:15:23
【问题描述】:

我有以下 jquery 代码:

客户端javascript代码:

         $.ajax({
                url: "/MyController/GetOrders",
                cache: false, dataType: "json"
            }).done(function (data) {

                FilloutTable(data.Orders);
            });

asp.net-mvc 控制器代码:

    [CompressFilter]
    [AcceptVerbs(HttpVerbs.Get)]
    public JsonResult GetOrders()
    {
        var orders = Model.GetOrders();
        return Json(new{Orders= orders}, JsonRequestBehavior.AllowGet);
    }

我有几个用户没有看到最新数据的案例。当我让他们清除浏览器缓存并进行硬刷新时,它就可以正常工作了。

我以为

 cache: false,

将保护我免受任何浏览器对此请求的缓存。有什么建议可以在这里缓存,有什么建议可以确保人们不会得到旧数据?

【问题讨论】:

  • 你知道他们用的是什么浏览器吗?您可能还想管理 no-cache 指令服务器端。
  • @MichaelLaffargue - 你能详细说明你的评论吗?
  • 嘿,这有什么成功吗?我也面临同样的问题

标签: jquery ajax asp.net-mvc caching


【解决方案1】:

您可以在 Action 上设置output cache 属性:

    [OutputCache(VaryByParam = "*", Duration = 0, NoStore = true)]
    public ActionResult AcyionName()
    {

以上代码将禁用特定 Action 的缓存。

请注意,您也可以通过以下方式阻止 controller level 上的缓存:

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public class ControllerName : Controller
{
     // ... 
 }

【讨论】:

  • 但是您在哪里看到任何服务器端缓存?
  • 您的行为可能是由于浏览器正在缓存页面并从浏览器缓存中提供它,验证这一点的一种方法是通过 Fiddler 检查流量,您可以查看流量​​并查看Url 是通过 304 http 状态码响应而不是 200 生成的。304 表明它来自缓存。
  • 更多关于缓存的信息请看这里:asp.net/mvc/tutorials/older-versions/controllers-and-routing/…
  • 我为什么要这么做。 .不是默认不缓存吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多