作为开发人员,我们要慎用IE,因为IE浏览器的兼容性没有其他浏览器好,比如谷歌,火狐。(本人不知道在IE中踩过多少坑,只能一步一步往外爬……)
但是对于必须用IE的企业,我们就不得不作兼容性的考虑。最近我遇到ajax访问后台方法时,其他浏览器都好使,唯独IE让我头疼不已。话不多说,直接po码:
function findNoticeById(id){
$.ajax({
url:"index/findNoticeById",
data:{id:id},
type:"get",
dataType:"json",
success:function(result){
layer.open({
type:1,
title:[result.title,'text-align:center'],
skin:'layui-layer-molv',
area:['50%','40%'],
content:$("#noticeContent")
})
$("#text").text(result.text);
}
})
}
代码并没有任何问题,经百度得知,IE浏览器有种缓存机制,当你ajax的请求路径在多次请求过程中没用发生任何变化,所以IE默认为你进行缓存,这样不会进入后台便直接进入到回调函数中。有以下几种解决方案:
1、在请求路径上添加随机数参数:
var urlStr = "index/findNoticeById" + "&" + Math.random();
$.ajax({
url:urlStr,
})
2、在参数中添加一个时间戳参数:
var times = new Date().getTime();
$.ajax({
data:{id:id,times:times:times},
})
3、在ajax请求中关闭缓存:
$.ajax({
data:{id:id},
cache:false,
})
另:之前还遇到一种情况,IE浏览器中ajax无法访问后台,但是会报错。是因为在请求路径中直接带有有不合法的参数(中文、特殊符号等等),需要在JS中使用encodeURL对此进行加密编码。