Ajax請求被緩存的幾種處理方式
咱們都知道IE會針對ajax請求的地址緩存請求結果,直到緩存過時以前,針對相同地址發出的請求,只有第一次會請求會真正發送到服務端.在某種狀況下,這種緩存機制確實能提升web的響應速度,可是有時候並非咱們須要的,有時候咱們須要獲取即時信息,那麼有哪幾種方式來解決這個問題呢,下面列舉了幾種解決方案!javascript
1. 經過URL添加後綴的方式css
這種方式是咱們你們都會使用的技巧,大多人都知道html
例如:java
原本請求的地址是: /home/action?git
加查詢參數後綴後:/home/action?ran=Match.Random();web
後綴查詢參數變量能夠自定義,只須要每次都變化便可!ajax
2. 經過Jquery的Ajax API設置相關屬性(代碼中標紅處)瀏覽器
<script type="text/javascript">
var LoadTime = function () {$.ajaxSetup({ cache: false });
$.ajax({url: '@Url.Action("currTime")',
success: function (result) {
$("#currTime").html(result);
}})}</script>
咱們使用fiddler抓取url請求,會發現此種方式與第一種解決方案相似,也是添加後綴的方式,如圖:緩存
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();
}