解决$.getJSON在IE浏览器下出现数据缓存,第一次访问某个后台路径之后,再次访问该路径不再走后台的方法。

最近写代码的时候遇到一个小问题,我用的是火狐,项目里测试人员用的是IE,当用jquery的getjson函数从后台获取数据的时候,IE浏览器会自动设置缓存,如果此时你对数据进行修改的时候刷新页面,IE并不会在页面显 示你修改后的数据,因为你刷新的时候IE浏览器会查找缓存并显示你修改前的数据,试了一些方法未果,最后在网上查了些资料终于解决了IE浏览器下的问题。

例如我们在IE浏览器中使用$.getJSON执行删除数据的操作,我们第一次执行删除数据的操作,操作成功,我们第二次或以后再次执行删除数据的操作,操作不成功,数据没有被删除。原因是$.getJSON在IE浏览器下默认会使用浏览器缓存,所以第二次之后不再访问删除数据的后台方法,所以数据没有被删除成功。解决方法如下:

1.$.getJSON是简写的 Ajax 函数,使用$.ajax代替改函数即解决。

$.ajax(webContext+"/ecs/ecs_detachCloudDisk.action?id="+id, function(json){
                        if(json.success){
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载成功!");
                            $('#datadisk_list').datagrid("reload");
                        }else{
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载失败!");
                        }
                    });

开始我是直接这样写的:

$.getJSON(webContext+"/ecs/ecs_detachCloudDisk.action?id="+id, function(json){
                        if(json.success){
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载成功!");
                            $('#datadisk_list').datagrid("reload");
                        }else{
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载失败!");
                        }
                    });

2.在你的请求的URL 后面设置个可变的参数(可以是时间,也可以是一个随机数,只要是一个随时可变的参数即可),比如:

$.getJSON(webContext+"/ecs/ecs_detachCloudDisk.action?id="+id+"&time="+new Date().getTime(), function(json){
                        if(json.success){
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载成功!");
                            $('#datadisk_list').datagrid("reload");
                        }else{
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载失败!");
                        }
                    });

开始我是直接这样写的(没有加"&time="+new Date().getTime()):

$.getJSON(webContext+"/ecs/ecs_detachCloudDisk.action?id="+id, function(json){
                        if(json.success){
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载成功!");
                            $('#datadisk_list').datagrid("reload");
                        }else{
                            Alert("实例("+instanceId+")下的磁盘("+diskid+")卸载失败!");
                        }
                    });

 补充:

后来我用$.ajax方式的访问在IE浏览器下也会出现上面所说的缓存问题,解决方式是建议在URL 后面也设置个可变的参数,这样就可以解决了。

原文地址:https://www.cnblogs.com/longshiyVip/p/4543677.html