问题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");