• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    如何解決Ajax請求結果的緩存問題說明

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:41:35
    文檔

    如何解決Ajax請求結果的緩存問題說明

    如何解決Ajax請求結果的緩存問題說明:在默認情況下,IE會針對請求地址緩存Ajax請求的結果。換句話說,在緩存過期之前,針對相同地址發(fā)起的多個Ajax請求,只有第一次會真正發(fā)送到服務端。在某些情況下,這種默認的緩存機制并不是我們希望的(比如獲取實時數(shù)據(jù)),這篇文章就來簡單地討論這個問題,
    推薦度:
    導讀如何解決Ajax請求結果的緩存問題說明:在默認情況下,IE會針對請求地址緩存Ajax請求的結果。換句話說,在緩存過期之前,針對相同地址發(fā)起的多個Ajax請求,只有第一次會真正發(fā)送到服務端。在某些情況下,這種默認的緩存機制并不是我們希望的(比如獲取實時數(shù)據(jù)),這篇文章就來簡單地討論這個問題,

    在默認情況下,IE會針對請求地址緩存Ajax請求的結果。換句話說,在緩存過期之前,針對相同地址發(fā)起的多個Ajax請求,只有第一次會真正發(fā)送到服務端。在某些情況下,這種默認的緩存機制并不是我們希望的(比如獲取實時數(shù)據(jù)),這篇文章就來簡單地討論這個問題,以及介紹幾種解決方案。
    目錄
    一、問題重現(xiàn)
    二、通過為URL地址添加后綴的方式解決問題
    三、通過JQuery的Ajax設置解決問題
    四、通過定制響應解決問題
    一、問題重現(xiàn)
    我們通過一個ASP.NET MVC應用來重現(xiàn)IE針對Ajax請求結果的緩存。在一個空ASP.NET MVC應用中我們定義了如下一個默認的HomeController,其中包含一個返回當前時間的Action方法GetCurrentTime。
    代碼如下:
     public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
            public string GetCurrentTime()
            {
               return DateTime.Now.ToLongTimeString();
           }
       }

    默認Action方法Index對應的View定義如下。我們每隔5秒鐘利用JQuery的方法以Ajax的方式調(diào)用GetCurrentTime操作,并將返回的結果顯示出來。
    代碼如下:
     <!DOCTYPE html>
        <html>
            <head>
                <title>@ViewBag.Title</title> 
                <script type="text/javascript" src="@Url.Coutent(“~/Scripts/jquery-1.7.1.min.js”)"></script>
                <script type="text/javascript">
                    $(function () {
                        window.setInterval(function () {
                            $.ajax({
                               url:'@Url.Action("GetCurrentTime")',
                               success: function (result) {
                                   $("ul").append("<li>" + result + "</li>");
                               }
                           });
                       }, 5000);
                   });
               </script>
           </head>
           <body>
               <ul></ul>
           </body>
       </html>

    采用不同的瀏覽器運行該程序會得到不同的輸出結果,如下圖所示,Chrome瀏覽器中能夠顯示出實時時間,但是在IE中顯示的時間都是相同的。

    二、通過為URL地址添加后綴的方式解決問題
    由于IE針對Ajax請求的返回的結果是根據(jù)請求地址進行緩存的,所以如果不希望這個緩存機制生效,我們可以在每次請求時為請求地址添加不同的后綴來解決這個問題。針對這個例子,我們通過如下的代碼為請求地址添加一個基于當前時間的查詢字符串,再次運行程序后IE中將會顯示實時的時間。
    代碼如下:
        <!DOCTYPE html>
        <html>
            <head>       
                <script type="text/javascript">
                    $(function () {
                        window.setInterval(function () {
                            $.ajax({
                                url:'@Url.Action("GetCurrentTime")?'+ new Date().toTimeString() ,
                                success: function (result) {
                                   $("ul").append("<li>" + result + "</li>");
                               }
                           });
                       }, 5000);
                   });
               </script>
           </head>
       </html>

    三、通過jQuery的Ajax設置解決問題
    實際上jQuery具有針對這個的Ajax設置,我們只需要按照如下的方式調(diào)用$.ajaxSetup方法禁止掉Ajaz的緩存機制。
    代碼如下:
     <!DOCTYPE html>
        <html>
            <head>       
                <script type="text/javascript">
                    $(function () {
                        $.ajaxSetup({ cache: false });

                        window.setInterval(function () {
                            $.ajax({
                                url:'@Url.Action("GetCurrentTime")',
                               success: function (result) {
                                   $("ul").append("<li>" + result + "</li>");
                               }
                           });
                       }, 5000);
                   });
               </script>
           </head>
       </html>

    實際上jQuery的這個機制也是通過為請求地址添加不同的查詢字符串后綴來實現(xiàn)的,這可以通過Fiddler攔截的請求來證實。

    四、通過定制響應解決問題
    我們可以通過請求的響應來控制瀏覽器針對結果的緩存,為此我們定義了如下一個名為NoCacheAttribute的ActionFilter。在實現(xiàn)的OnActionExecuted方法中,我們調(diào)用當前HttpResponse的SetCacheability方法將緩存選項設置為NoCache。該NoCacheAttribute特性被應用到GetCurrentTime方法后,運行我們的程序在IE中依然可以得到實時的時間。
    代碼如下:
     public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }

            [NoCache]

            public string GetCurrentTime()
           {
               return DateTime.Now.ToLongTimeString();
           }
       }
       public class NoCacheAttribute : FilterAttribute, IActionFilter
       {
           public void OnActionExecuted(ActionExecutedContext filterContext)
           {
             filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
           }

           public void OnActionExecuting(ActionExecutingContext filterContext)
           {}
       }
     

    實際NoCacheAttribute特性最終控制消息消息的Cache-Control報頭,并將其設置為“no-cache”,指示瀏覽器不要對結果進行緩存。如下所示的是針對GetCurrentTime請求的響應消息:
    代碼如下:
     HTTP/1.1 200 OK
        Server: ASP.NET Development Server/10.0.0.0
        Date: Thu, 03 Jan 2013 12:54:56 GMT
        X-AspNet-Version: 4.0.30319
        X-AspNetMvc-Version: 4.0
        Cache-Control: no-cache

        Pragma: no-cache
        Expires: -1
        Content-Type: text/html; charset=utf-8
       Content-Length: 10
       Connection: Close

       8:54:56 PM

    靜守己心,看淡浮華

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    如何解決Ajax請求結果的緩存問題說明

    如何解決Ajax請求結果的緩存問題說明:在默認情況下,IE會針對請求地址緩存Ajax請求的結果。換句話說,在緩存過期之前,針對相同地址發(fā)起的多個Ajax請求,只有第一次會真正發(fā)送到服務端。在某些情況下,這種默認的緩存機制并不是我們希望的(比如獲取實時數(shù)據(jù)),這篇文章就來簡單地討論這個問題,
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲日本精品一区二区| 国产三级国产精品国产普男人 | 亚洲精品国产福利一二区| 国内精品在线视频| 久久精品午夜一区二区福利| 久久99精品国产麻豆不卡| 亚洲国产精品lv| 99久久国产热无码精品免费| 少妇人妻无码精品视频app| 免费国产在线精品一区| 国产香蕉国产精品偷在线观看| 国产午夜精品理论片久久影视| 久久精品免费大片国产大片| 91精品国产色综久久| 日韩精品久久久肉伦网站| 亚洲国产精品一区二区第四页 | 88国产精品欧美一区二区三区| 国产精品久久午夜夜伦鲁鲁| 欧洲精品色在线观看| 一本色道久久88—综合亚洲精品| 久久精品国产只有精品66| 国产精品青青在线观看爽香蕉| 思思99热在线观看精品| 国产福利视精品永久免费 | 国产精品久久久久久久| 国产精品白丝AV网站| 精品久久久久久无码中文字幕一区 | 成人精品视频99在线观看免费| 久久久久久夜精品精品免费啦| 在线亚洲欧美中文精品| 2021年精品国产福利在线| 久久这里只有精品久久| 久久久精品免费国产四虎| 久久亚洲精品视频| 97视频在线精品国自产拍| 99re只有精品8中文| 国产精品超碰12396| 国产精品亚洲w码日韩中文| 国产原创精品 正在播放| 久久亚洲精品无码观看不卡| 亚洲精品岛国片在线观看|