問題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");