最近写代码的时候遇到一个小问题,我用的是火狐,项目里测试人员用的是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 后面也设置个可变的参数,这样就可以解决了。