Chrome 66升级后网站Ajax调用异常,Firefox/Edge可正常运行
解决Chrome 66中Ajax回调多次执行的问题
我之前也碰到过Chrome版本更新后Ajax行为异常的情况,结合Chrome 66的已知变更,给你几个针对性的排查和解决方向:
1. 排查是否存在回调重复绑定
有时候页面加载逻辑在Chrome 66中可能触发了重复执行,导致同一个Ajax请求的success回调被多次绑定。你可以:
- 如果用jQuery的话,在绑定回调前先解绑旧事件:
$(document).off('ajaxSuccess.myNamespace').on('ajaxSuccess.myNamespace', function(){...}) - 在回调函数开头加一行日志:
console.log('回调触发时间:', new Date().getTime()),通过控制台日志确认触发次数,判断是回调重复绑定还是请求本身被多次发送
2. 检查Chrome 66的缓存策略变更
Chrome 66对HTTP缓存规则做了调整,可能导致同一个请求被浏览器重复发起。你可以:
- 在Ajax请求中强制禁用缓存:比如jQuery里设置
cache: false,或者手动给URL加时间戳参数:url: '/your/api/path?' + Date.now() - 查看服务器返回的
Cache-Control、Expires响应头,确认是否在Chrome中被过度缓存,导致请求重复触发
3. 确认请求是否被浏览器自动重试
Chrome 66优化了异常请求的重试逻辑,比如超时、连接中断的请求可能被自动重试,进而触发多次success回调。你可以:
- 打开Chrome开发者工具的Network面板,勾选「Preserve log」后刷新页面,查看目标Ajax请求的发起次数
- 检查请求的超时设置,或者服务器端是否返回了模糊的异常状态码(比如5xx系列),导致Chrome判定需要重试
4. 验证框架兼容性(如果用了jQuery等库)
如果你的项目用了较老版本的jQuery(比如2.x及以前),可能和Chrome 66的XHR事件处理逻辑不兼容。你可以:
- 临时升级到jQuery 3.x系列版本,测试问题是否消失
- 查看框架源码中
ajaxSuccess事件的绑定逻辑,确认是否存在在Chrome新环境下的触发异常
举个快速调试的代码示例:
// 在你的Ajax success回调里添加日志 $.ajax({ url: '/your/api/endpoint', success: function(response) { console.log('回调执行次数:', performance.now()); // 你的原有业务逻辑 } });
通过控制台的时间戳,就能快速区分是请求重复发送,还是回调被多次绑定。
内容的提问来源于stack exchange,提问作者anjali arasu
相关产品推荐
相关产品推荐

