getjson時使用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='+newDate(),function($data)){ ...... }

               例3:$.getJSON('index.php?randN='+escape(newDate()),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">

                 <METAHTTP-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,

            注意:varname=update.php?abc&sex=man&age=18以及varname=?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");

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