Asp.net mvc 在ASP.NET MVC中调试AJAX缓存
我有一个简单的概念证明,它似乎处理缓存很奇怪。以下是观点:Asp.net mvc 在ASP.NET MVC中调试AJAX缓存,asp.net-mvc,ajax,jquery,Asp.net Mvc,Ajax,Jquery,我有一个简单的概念证明,它似乎处理缓存很奇怪。以下是观点: <script> $('#clickToLoad').click(function() { $.ajax({ url: "<%=ResolveUrl("~/Home/AjaxCacheTest") %>?" , dataType: 'json' ,ifModified: true ,cache: true
<script>
$('#clickToLoad').click(function() {
$.ajax({
url: "<%=ResolveUrl("~/Home/AjaxCacheTest") %>?"
, dataType: 'json'
,ifModified: true
,cache: true
,success: function(sourceData) {
}
});
});
</script>
我希望通过缓存得到一个结果,但是,似乎AjaxCacheTest不会缓存,除非我自己请求它(也就是说,在浏览器窗口中,而不是在AJAX中)
设置cache:true没有帮助。设置ifModified:true确实会导致缓存,但它不会调用success函数,因此无法使用结果
是否有允许缓存并仍然调用响应回调的选项
更新:
谢谢,忘了加那些了。我正在使用firebug进行测试,并通过查看响应代码(200OK vs 302)和请求的响应时间来确定如何处理缓存。这一切都在Visual Studio的内置服务器(Cassini?)上完成。以下是场景中缓存的工作方式。假设您定义了以下操作
[OutputCache(VaryByParam = "none", Duration = 5)]
public ActionResult AjaxCache()
{
return Json(new { date = DateTime.Now }, JsonRequestBehavior.AllowGet);
}
如果未显式设置属性,则默认为该属性,这意味着:
输出缓存可以位于
浏览器客户端(其中包含请求)
在代理服务器(或任何
(其他服务器)参与
请求,或在
请求已被处理。此值
对应于
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>
你在测试什么?IIS?卡西尼号?您是否处于调试模式(我指的是web.config中的设置)?您是否通过FireBug或类似工具检查了Request和response标题?请添加问题的答案。看起来这是有点工作…我不得不升级到MVC2来尝试它,也许这与它有关。它不再发送304s,只发送200s。我会做更多的测试,稍后再解决,谢谢。是的,这在MVC2中有效,不知道MVC1中有什么问题。只有一个警告;至少在我的例子中,我必须向ajax调用添加数据类型:“json”。谢谢
<%= 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>
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: *