簡體   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