国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解

2024-07-10 12:46:58
字體:
來源:轉載
供稿:網友

介紹

盡管jQuery在瀏覽器ajax調用的時候對緩存提供了很好的支持,還是有必要了解一下如何高效地使用http協議。

首先要做的事情是在服務器端支持HTTP GET,定義不同的URL輸出不同的數據(MVC里對應的就是action)。如果要使用同一個地址獲取不同的數據,那就不對了,一個HTTP POST也不行因為POST不能被緩存。許多開發人員使用POST主要有2個原因:明確了數據不能被緩存,或者是避免JSON攻擊(JSON返回數組的時候可以被入侵)。

緩存解釋

jQuery全局對象里的ajax方法提供了一些options來支持緩存和Conditional GETs功能。

$.ajax({  ifModified: [true|false],  cache: [true|false],});

ifModified選項定義的是在ajax調用的時候是否支持Conditional GETs功能。jQuery會自動幫我們處理服務器端返回的名為Last-Modified的header值,然后在隨后的請求里的header里發送If-Modified-Since。這需要我們的MVC Controller要實現Conditional GETs功能才能用。Conditional GETs功能在http緩存上下文中用于重新驗證緩存中過期的條目。如果jQuery認為一個條目已經過期了,它首先會請求服務器使用Conditional GETs功能重新驗證該條目,如果服務器返回狀態碼304(Not modified),jQuery會重新使用緩存里的該項目,這樣的話,我們可以節約很多流量去下載頁面內容。

cache選項基本上是覆蓋服務器端返回的http header里的所有關于緩存的設置,如果設置cache選項為false的話,jQuery會在請求的URL后面附件一個時間戳,以便區分之前的URL地址,這樣沒錯請求的內容都是最新的,也就是說瀏覽器每次接收的都是新地址,自然返回的都是最新數據。

讓我們來看幾個場景:

服務器端響應里設置No-Cache

服務器端為王,如果服務器端明確定義了response響應不能被緩存的話,jQuery也無能為力。ajax里的cache選項將被忽略。

JS代碼:

$('#nocache').click(function () {  $.ajax({    url: '/Home/NoCache',    ifModified: false,    cache: true,    success: function (data, status, xhr) {      $('#content').html(data.count);    }  });});

C#代碼:

public ActionResult NoCache(){  // 禁用緩存  Response.Cache.SetCacheability(HttpCacheability.NoCache);  return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);}

服務器端響應里設置過期時間

服務器端設置過期時間用于緩存數據,該條目在客戶端將依據過期時間被緩存。

JS代碼:

$('#expires').click(function () {  $.ajax({    url: '/Home/Expires',    ifModified: false,    cache: true,    success: function (data, status, xhr) {      $('#content').html(data.count);    }  });});

C#代碼:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇江市| 通榆县| 桓仁| 喜德县| 镇雄县| 莱州市| 肥乡县| 谷城县| 商洛市| 宝坻区| 商都县| 沙湾县| 大丰市| 临颍县| 韶山市| 昔阳县| 阿瓦提县| 文昌市| 迁西县| 肥城市| 大兴区| 丰顺县| 六枝特区| 吉林市| 肥城市| 英山县| 米林县| 雅安市| 华蓥市| 恩平市| 博兴县| 临猗县| 千阳县| 四会市| 如东县| 中方县| 工布江达县| 龙川县| 恩施市| 永丰县| 广德县|