Ajax請求被緩存的幾種處理方式

 我們都知道IE會針對ajax請求的地址緩存請求結果,直到緩存過期之前,針對相同地址發出的請求,只有第一次會請求會真正發送到服務端.在某種情況下,這種緩存機制確實能提高web的響應速度,但是有時候並不是我們需要的,有時候我們需要獲取即時信息,那麼有哪幾種方式來解決這個問題呢,下面列舉了幾種解決方案! 1.  通過URL添加後綴的方式    這種方式是我們大家都會使用的技巧,大多人都知道    例如:    本來請求的地址是: /home/action?    加查詢參數後綴後:/home/action?ran=Match.Random();    後綴查詢參數變量可以自定義,只需要每次都變化即可! 2. 通過Jquery的Ajax  API設置相關屬性(代碼中標紅處)

我們使用fiddler抓取url請求,會發現此種方式與第一種解決方案類似,也是添加後綴的方式,如圖: fiddler2 3. 通過定製響應(此處參考http://www.cnblogs.com/artech/archive/2013/01/03/cache-4-ie.html)    我們都知道http請求頭重包請求的相關屬性,此種方式通過控制消息頭中的Cache-Control包頭,並將其設置爲”No-Cache”,這樣只是瀏覽器不對結果緩存.        那麼如何達到上述目的呢?    首先,我們定義一個名爲NoCacheAttribute的ActionFilter.在實現的OnActionExecuted方法中,我們調用當前HttpResponse的SetCacheability方法將緩存選項設置爲NoCache.將該屬性應用到方法.然後運行我們的程序    先看NoCacheAttribute的定義:    public class NoCacheAttribute:FilterAttribute,IActionFilter        {            public void OnActionExecuted(ActionExecutedContext filterContext)            {                filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);            }                public void OnActionExecuting(ActionExecutingContext filterContext)            {                //throw new NotImplementedException();            }        }    將屬性應用到方法    [NoCache]     public string CurrTime() {          return DateTime.Now.ToLongTimeString();     }        通過fiddler查看請求頭    fiddler2    如圖,已達到了控制消息頭的緩存選項.讓瀏覽器不在混存請求

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章