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

原文地址:https://www.cnblogs.com/pengfei25/p/8342126.html