random= Math.random 解決數據緩存問題

問題1:爲什麼使用random= Math.random

答:首先,Math.random會產生一個隨機數;

      其次,使用參數random是爲了解決該getJSON的緩存問題(即,當不使用該參數時,如果修改了要顯示的數據,而getJSON(...)取得的仍然是更新前的數據,而取不到更新後的數據。)

問題2:getJSON()緩存問題是什麼效果?

答:在使用Jquery當中的getJSON()方法時,往往會出現只能在第一次調用的時候起到效果的現象!除非關掉瀏覽器重新打開纔會刷新改變的效果!

問題3:getJSON()緩存問題產生原因?

      Jquery當中的getJSON()使用了瀏覽器緩存,當你第一次調用完之後,在瀏覽器的生命週期當中,再次調用時會直接從瀏覽器的緩存當中獲取數據。

      如果你使用/調試的話,你會發現除了第一次會訪問你的後臺程序之外,後續再多的操作也不會對你的後臺程序進行訪問!

     即如果修改了數據,也不會得到前臺頁面也不會得到更新。

問題4:緩存問題的解決方法?

  (已試)(1)讓每次調用的url都不一樣。

          方法

                  1:在參數中添加一個隨機數

                  2:在參數中添加一個時間戳

           例子:

              例1:$.getJSON('index.php?randID='+Math.random(),function($data)){ ......  }

               例2:$.getJSON('index.php?t='+new Date(),function($data)){ ......  }

                例3:$.getJSON('index.php?randN='+escape(new Date()),function($data)){ ......  }

  (未試)  (2)將cache設爲false 

                   $.ajax不緩存版:
                   $.ajax({
                       type:"GET"
                       url:'test.html',
                       cache:false,
                       dataType:"html",
                        success:function(msg){
                           alert(msg);
                           }
                     });

   (未試) (3)在文件(如labels.html)的頂部加入以下聲明:

                 <META HTTP-EQUIV="Pragma" CONTENT="no-cache">

                 <META HTTP-EQUIV="Expires" CONTENT="-1">

   (未試)(4)load函數不僅可以調用HTML,也可以調用script,比如labels.php,可以在php文件裏使用header函數:    

                 <?php

                  header("Cache-Control:no-cache, must-revalidate");

                 ?>

  (未試) (5) 使用post代替get方法:                

               使用Post方式需注意:
             設置header的Context-Type爲application/x-www-form-urlencode確保服務器知道實體中有參數變量.

             通常使用XmlHttpRequest對象的SetRequestHeader("Context-Type","application/x-www- form-urlencoded;")。

             例:  xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");


            參數是名/值一一對應的鍵值對,每對值用&號隔開.  如 var name=abc&sex=man&age=18,

             注意:var name=update.php?abc&sex=man&age=18以及var name=?abc&sex=man&age=18的寫法都是錯誤的;
           參數在Send(參數)方法中發送,例: xmlHttp.send(name);

            如果是get方式,直接 xmlHttp.send(null);

          服務器端請求參數區分Get與Post。如果是get方式則$username = $_GET["username"]; 如果是post方式,則$username = $_POST["username"];

  (未試) (6)在服務端加header("Cache-Control:no-cache, must-revalidate");

  (未試)(7)在ajax發送請求前加上xmlHttpRequest.setRequestHeader("If-Modified-Since","0");

  (未試)(8)在ajax發送請求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");

 

參考資料:

1、$.getJSON的緩存問題 http://blog.csdn.net/zzh345277793/archive/2010/12/20/6087031.aspx 

2、JQuery當中的getJSON緩存問題解決方案 http://apps.hi.baidu.com/share/detail/16627500

3、JQuery當中的getJSON緩存問題解決方案(zhuan)  http://hi.baidu.com/jrc520/blog/item/17c14ba798485998d0435809.html


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