zoukankan      html  css  js  c++  java
  • IE11在使用get方式提交没有进行请求的bug问题

    在做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,(这种方式没有测试,按道理是可以的)

  • 相关阅读:
    linux安装mysql5.7.24
    如何解决svn Authorization failed错误
    vux配置i18n
    vue项目使用vux框架配置教程
    EL函数
    Android的taskAffinity对四种launchMode的影响
    Activity生命周期-Android
    为什么用服务不用线程-Android
    Hibernate总结--MyEclipse的小bug
    EL表达式隐含对象
  • 原文地址:https://www.cnblogs.com/pengfei25/p/8342126.html
Copyright © 2011-2022 走看看