zoukankan      html  css  js  c++  java
  • 解决$.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 后面也设置个可变的参数,这样就可以解决了。

  • 相关阅读:
    Mac查看与修改系统默认shell
    nginx经验分享
    如何将MAC的 Terminal 行首变得清爽简洁一点?
    关于Promise详解
    关于Webpack详述系列文章 (第四篇)
    关于Webpack详述系列文章 (第三篇)
    关于Webpack详述系列文章 (第二篇)
    关于Webpack详述系列文章 (第一篇)
    关于回调函数和回调函数常出现的问题
    原生JS使用Blob导出csv文件
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/4543677.html
Copyright © 2011-2022 走看看