茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解
    來源:易賢網(wǎng) 閱讀:984 次 日期:2016-08-05 15:31:18
    溫馨提示:易賢網(wǎng)小編為您整理了“ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解,需要的朋友可以參考下。

    介紹

    盡管jQuery在瀏覽器ajax調(diào)用的時候?qū)彺嫣峁┝撕芎玫闹С?,還是有必要了解一下如何高效地使用http協(xié)議。

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

    緩存解釋

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

    $.ajax({

      ifModified: [true|false],

      cache: [true|false],

    });

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

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

    讓我們來看幾個場景:

    服務(wù)器端響應(yīng)里設(shè)置No-Cache

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

    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);

    }

    服務(wù)器端響應(yīng)里設(shè)置過期時間

    服務(wù)器端設(shè)置過期時間用于緩存數(shù)據(jù),該條目在客戶端將依據(jù)過期時間被緩存。

    JS代碼:

    $('#expires').click(function () {

      $.ajax({

        url: '/Home/Expires',

        ifModified: false,

        cache: true,

        success: function (data, status, xhr) {

          $('#content').html(data.count);

        }

      });

    });

    C#代碼:

    public ActionResult Expires()

    {

      Response.Cache.SetExpires(DateTime.Now.AddSeconds(5));

      return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);

    }

    客戶端從來不緩存數(shù)據(jù)

    客戶端決定每次都要最新的數(shù)據(jù)(不能使用緩存),也就是說ajaxi里的cache選項(xiàng)設(shè)置為false,不管服務(wù)器端如何定義,jQuery每次請求的URL地址都是唯一不同的,目的是每次都獲取最新的內(nèi)容。

    JS代碼:

    $('#expires_nocache').click(function () {

      $.ajax({

        url: '/Home/Expires',

        ifModified: false,

        cache: false, // 這里是關(guān)鍵

        success: function (data, status, xhr) {

          $('#content').html(data.count);

        }

      });

    });

    C#代碼:

    public ActionResult Expires()

    {

      // 不管服務(wù)器端怎么設(shè)置都沒用

      Response.Cache.SetExpires(DateTime.Now.AddSeconds(5));

      return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);

    }

    服務(wù)器端和客戶端使用Conditional Gets功能驗(yàn)證緩存數(shù)據(jù)

    客戶端將條目放在緩存里,在過期之后重新驗(yàn)證。服務(wù)器端必須實(shí)現(xiàn)Conditional GET功能(使用ETags或者last modified的header)。

    JS代碼:

    $('#expires_conditional').click(function () {

      $.ajax({

        url: '/Home/ExpiresWithConditional',

        ifModified: true, // 這里是關(guān)鍵

        cache: true,

        success: function (data, status, xhr) {

          $('#content').html(data.count);

        }

      });

    });

    C#代碼:

    public ActionResult ExpiresWithConditional()

    {

      if (Request.Headers["If-Modified-Since"] != null && Count % 2 == 0)

      {

        return new HttpStatusCodeResult((int)HttpStatusCode.NotModified);

      }

      Response.Cache.SetExpires(DateTime.Now.AddSeconds(5));

      Response.Cache.SetLastModified(DateTime.Now);

      return Json(new { count = Count++ }, JsonRequestBehavior.AllowGet);

    }

    上述MVC action中的代碼只是一個例子(非真實(shí)代碼),在真實(shí)的實(shí)現(xiàn)中,服務(wù)器端應(yīng)該能夠知道數(shù)據(jù)自從上次響應(yīng)以后是否被修改過。

    總結(jié):

    詳細(xì)通過這4個場景,大家應(yīng)該了解了ajax請求的緩存技術(shù)了吧,我就不做總結(jié)了。

    以上這篇ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:ASP.NET MVC中使用jQuery時的瀏覽器緩存問題詳解
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報班

    • 報班類型
    • 姓名
    • 手機(jī)號
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)