問題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不緩存版: (未試) (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方式需注意: 通常使用XmlHttpRequest對象的SetRequestHeader("Context-Type","application/x-www- form-urlencoded;")。 例: xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
注意:var name=update.php?abc&sex=man&age=18以及var name=?abc&sex=man&age=18的寫法都是錯誤的; 如果是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 |
random= Math.random 解決數據緩存問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.