You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery.bind()绑定Ajax事件在Chrome/Edge失效,Firefox正常运行

问题解决:同步AJAX导致loading效果在Chrome/Edge失效

问题说明

这段代码在Firefox 103.0中能正常控制loading的显示与隐藏,但在Chrome和Microsoft Edge里无法生效:

$('#loading').bind('ajaxStart', function () {
  $(this).show();
}).bind('ajaxStop', function () {
  $(this).hide();
});

控制台提示(已翻译):

主线程上的同步XMLHttpRequest已被弃用,因为它会对终端用户体验产生不利影响。

原因分析

Chrome和Edge对同步AJAX的限制更为严格,ajaxStart/ajaxStop事件不会触发同步AJAX请求的相关回调;而Firefox目前仍兼容这类旧行为。同步AJAX会阻塞主线程,造成页面卡顿,这也是现代浏览器逐步限制它的核心原因。

解决方案

  1. 将同步AJAX改为异步(推荐)
    找到发起同步请求的代码,移除或修改async: false的设置(jQuery默认即为异步):
// 原同步请求(问题根源)
$.ajax({
  url: '请求地址',
  async: false,
  // 其他参数
});

// 修改为异步请求
$.ajax({
  url: '请求地址',
  // 可省略async,默认就是true;也可显式声明async: true
  // 其他参数
});

修改后,ajaxStart/ajaxStop就能正常触发,loading效果会在各浏览器中一致生效。

  1. 手动控制loading状态(仅特殊场景使用)
    如果确实必须使用同步请求(不推荐),直接在请求前后手动控制loading:
// 请求前显示loading
$('#loading').show();
// 执行同步请求
$.ajax({
  url: '请求地址',
  async: false,
  // 其他参数
});
// 请求完成后隐藏loading
$('#loading').hide();

内容的提问来源于stack exchange,提问作者Vishal Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:48:58