Jquery Ajax调用偶发异常:仅IE11调试模式下可请求Servlet
IE11下Ajax仅调试模式正常的问题排查与解决
哥们,我太懂这种IE11的奇葩坑了!只有开F12调试、断点在$.ajax时才能正常发请求,正常模式下就哑火,大概率是IE的缓存机制或者调试模式的特殊行为在搞鬼,咱们一步步来解决:
最可能的原因:IE11对GET请求的强缓存
IE11默认会死死缓存GET请求的结果,正常模式下直接读本地缓存根本不发新请求,但调试模式下浏览器会自动禁用缓存(或者断点等待的时间让缓存失效了)。你的代码用的是jQuery Ajax默认的GET方法,先试试给请求加禁用缓存的参数:
$(document).ready(function() { alert("I am here ...1"); $.ajax({ url: "/digitalStratagy/Greetings", cache: false // 核心:让IE别读缓存 }).then(function(data) { $('.greeting-id').append(data.id); $('.greeting-content').append(data.content); }); });
cache: false会让jQuery自动在URL末尾加一个随机的时间戳参数(比如?_=1698765432),每次请求的URL都不一样,IE就没法用缓存糊弄过去了。
其他可能的排查方向
- 控制台未开启时的代码报错:如果你的代码后面有
console.log之类的语句,IE11在没开F12时会因为console对象未定义直接报错,中断整个脚本执行。解决方法是先判断console是否存在:
// 把所有console语句包起来 if (typeof console !== 'undefined') { console.log('你的调试信息'); }
- URL路径解析问题:虽然调试时能成功,但正常模式下IE可能对相对路径的解析有差异,试试用绝对路径拼接:
url: window.location.origin + "/digitalStratagy/Greetings"
- 显式指定请求方法:有时候IE对默认的GET方法处理奇怪,显式声明
type: "GET"可能解决问题:
$.ajax({ url: "/digitalStratagy/Greetings", type: "GET", cache: false })
- 添加错误回调排查问题:给Ajax加个
fail回调,看看正常模式下请求到底为啥失败,能帮你精准定位:
$.ajax({ url: "/digitalStratagy/Greetings", cache: false }).done(function(data) { $('.greeting-id').append(data.id); $('.greeting-content').append(data.content); }).fail(function(xhr, status, error) { alert('请求失败:' + status + ',错误详情:' + error); });
先从禁用缓存开始试,这是IE11 Ajax这类问题的头号元凶,大概率能解决你的问题!
内容的提问来源于stack exchange,提问作者user3067524
相关产品推荐
相关产品推荐

