在做iemsc项目的时候,测试提交了一个bug问题,在发布新闻成功后,自动刷新列表的时候,不进行刷新,但是在谷歌上面又不会出现这种问题,
原因:
发现请求的时候用的get请求,因为不同的浏览器的请求机制可能不一样,在后台查看接口的时候发现请求被重定向了,为302,所以就是缓存的问题,
解决办法:
一、将get方式改成post方式,这种方式直接,因为post方式是默认不缓存,而get会被浏览器主动cache
既然是缓存的问题,那么延生的解决办法还有
二、在请求参数的里面加上一个随机数,目的就是告诉浏览器,请求的主体发生了变化
data:{r:Math.random()}
<script> $(function(){ $(".js_btn").click(function(){ $.ajax ({ type:'GET', url:'getRealTime', data:{r:Math.random()}, dataType:'json', success:function(d){ if(d.isSuccess){ $(".js_text").val(d.data); }else{ alert(d.message); } }, error:function(){ alert("请求超时!"); } }) }) }) </script>
每次执行请求的内容如下:
三、更改jquery的全局不缓存
使用jQuery.ajaxSetup(name:value, name:value, …) 方法设置全局 AJAX 默认选项。
通过这种办法可以设置让Ajax发送请求后得到响应返回的结果不写入浏览器的缓存中。
$.ajaxSetup({ cache:false });
我这样做原理其实和第二种方式差不多,在设置Ajax返回数据不写入缓存后,每次点击“获取当前时间”后,向服务器端发送的请求内容也是不一样的,同理,这样做也可以解决了IE每次发送相同请求Ajax时都会首先读取缓存中内容的问题。
四、在头部mete里面no-cache:no-cache,(这种方式没有测试,按道理是可以的)