getjson时使用random= Math.random 解决数据缓存问题

来源:互联网 发布:毛笔字 知乎 编辑:程序博客网 时间:2024/06/16 15:29

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

0 0
原创粉丝点击