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

Ajax/PHP实现加载显示隐藏遇问题:classList报错及页面刷新

问题修复方案

1. 解决Cannot read properties of undefined (reading 'add')报错

你用jQuery选择器$('div.loading')获取的是jQuery对象,而classList是原生DOM元素的属性,两者不兼容导致报错。直接替换为jQuery的类操作方法即可:

  • 添加类:$('div.loading').addClass('d-block')
  • 移除类:$('div.loading').removeClass('d-block')

2. 解决页面刷新问题

页面刷新是因为表单默认提交行为未被阻止。确保在事件处理逻辑中明确阻止默认行为,比如绑定表单submit事件时,调用event.preventDefault(),同时保证return false处于事件函数的外层(异步回调里的return不会生效)。

修复后的完整代码

// 绑定表单submit事件
$('form').on('submit', function(e) {
  // 阻止表单默认提交行为
  e.preventDefault();

  $.ajax({
    url: "/send_email",
    type: "POST",
    data: $(this).serialize(), // 用$(this)指代当前表单,避免全局选择器的潜在问题
    beforeSend: function() {
      $('div.loading').addClass('d-block');
    }
  })
  .done(function(response) {
    $('div.loading').removeClass('d-block');
    $('div.message').html(response);
  });

  // 双重保险,防止默认行为触发
  return false;
});

补充说明

  • 如果一定要用原生classList,可以把jQuery对象转为原生DOM元素:$('div.loading')[0].classList.add('d-block'),但推荐用jQuery方法保持代码一致性。
  • 确保d-block类的CSS规则正确(比如设置display: block;,而初始状态下.loading的display为none),这样添加类后才能正常显示加载状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:35:20