问题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.youkuaiyun.com/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 |