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