繁体   English   中英

在ASP.NET MVC中调试AJAX缓存

[英]Debugging AJAX caching in ASP.NET MVC

我有一个简单的概念证明,似乎在处理缓存。 这是视图:

<script>       
$('#clickToLoad').click(function() {
    $.ajax({
        url: "<%=ResolveUrl("~/Home/AjaxCacheTest") %>?"
        , dataType: 'json'
            ,ifModified: true
            ,cache: true
        ,success: function(sourceData) {
        }
    });
});
</script>

这链接到控制器中的动作:

[OutputCache(VaryByParam = "none", Duration = 3000)]
public ContentResult AjaxCacheTest()
{
    return Content("0", "application/json");
}

我想通过缓存获得结果,但是,除非我自己请求(即在浏览器窗口而不是AJAX中),否则AjaxCacheTest似乎不会缓存。

设置缓存:true无济于事。 设置ifModified:true会导致缓存,但是它不会调用成功函数,因此无法使用结果。

是否有任何选项允许缓存并仍调用响应回调?

更新:谢谢,忘了添加这些。 我正在测试Firebug,并通过查看响应代码(200 OK vs 302)和请求的响应时间来确定如何处理缓存。 所有这些都在Visual Studio的内置服务器(卡西尼(Cassini?))上。

这是您方案中的缓存的工作方式。 假设您定义以下操作

[OutputCache(VaryByParam = "none", Duration = 5)]
public ActionResult AjaxCache()
{
    return Json(new { date = DateTime.Now }, JsonRequestBehavior.AllowGet);
}

如果未显式设置Location属性,则默认为OutputCacheLocation.Any ,这意味着:

输出缓存可以位于浏览器客户端(发出请求的位置)上,参与请求的代理服务器(或任何其他服务器)上或处理请求的服务器上。 此值对应于HttpCacheability.Public枚举值。

Duration = 5表示内容将被缓存5秒。 接下来,您发送ajax请求:

<%= Html.ActionLink("cache test", "AjaxCache") %>

<script type="text/javascript">
$(function() {
    $('a').click(function() {
        $.ajax({ url: this.href,
            success: function(json) {
                $('#result').html(json.date);
            }
        });        
        return false;
    });
});
</script>

<div id="result"></div>

如果在5秒间隔内两次单击链接,您将看到结果div不会改变,服务器动作也不会被命中,但success回调将始终执行。 服务器发送以下标头:

Cache-Control: public, max-age=5
Expires: Fri, 26 Feb 2010 14:09:02 GMT
Last-Modified: Fri, 26 Feb 2010 14:08:57 GMT
Vary: *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM