[英]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.