您的位置:首页 > 理论基础 > 计算机网络

random= Math.random 解决数据缓存问题

2012-05-11 17:21 423 查看
问题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不缓存版:

                   $.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">

                 <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方式需注意:

             设置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,

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

 

参考资料:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息