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

ASP.NET MVC页面Bootbox删除后二次Ajax仅断点时生效问题

解决Bootbox确认删除后二次Ajax请求仅断点执行的问题

老哥,我之前也碰到过一模一样的情况!这种只有断点调试才正常、无断点就跳过请求的问题,基本都是异步时序或者隐藏的上下文问题导致的,控制台没报错反而更说明是执行时机或者缓存这类“隐性”问题,给你几个排查和解决的方向:

1. 用Promise链式调用替代嵌套Ajax,确保时序正确

Bootbox从5.x版本开始支持Promise风格的回调,嵌套的Ajax很容易因为异步事件循环的优先级问题,导致二次请求被浏览器“跳过”(其实是执行时机不对,DOM已经被其他操作影响了)。把代码改成链式Promise,保证每一步都按顺序执行:

// 绑定删除按钮点击事件
$('.delete-btn').on('click', function(e) {
  e.preventDefault(); // 一定要阻止默认行为,避免页面跳转/滚动干扰
  const recordId = $(this).data('id');

  bootbox.confirm("确定要删除这条记录吗?")
    .then(function(confirmResult) {
      // 用户确认删除,执行首次删除请求
      if (confirmResult) {
        return $.ajax({
          url: '/YourController/DeleteRecord',
          type: 'POST',
          data: { id: recordId },
          contentType: 'application/json'
        });
      }
      // 用户取消,返回一个resolved的Promise终止链
      return Promise.resolve();
    })
    .then(function(deleteResponse) {
      // 删除成功后执行二次请求
      if (deleteResponse) {
        return $.ajax({
          url: '/YourController/GetUpdatedData',
          type: 'GET',
          cache: false // 禁用缓存,避免浏览器返回旧数据
        });
      }
    })
    .then(function(updatedData) {
      // 更新页面DOM
      $('#data-list-container').html(updatedData);
    })
    .catch(function(error) {
      // 全局捕获错误,终于能看到哪里出问题了!
      console.error('操作出错:', error);
      bootbox.alert('删除或加载数据失败,请重试');
    });
});

2. 检查是否存在浏览器缓存问题

如果二次请求是GET类型,浏览器很可能会缓存之前的响应,导致你看起来像是请求没执行,但其实是用了缓存数据。除了上面代码里的cache: false,还可以手动加时间戳参数彻底禁用缓存:

url: '/YourController/GetUpdatedData?' + new Date().getTime(),

3. 排查隐藏的代码错误

有时候控制台没报错,是因为错误被异步回调吞掉了。给二次Ajax加上error回调,或者在success里加try-catch:

// 二次请求的完整配置
$.ajax({
  url: '/YourController/GetUpdatedData',
  type: 'GET',
  cache: false,
  success: function(data) {
    try {
      $('#data-list-container').html(data);
    } catch (e) {
      console.error('更新DOM时出错:', e);
    }
  },
  error: function(xhr, status, err) {
    console.error('二次请求失败:', status, err);
  }
});

4. 确认Bootbox的上下文没有冲突

老版本的Bootbox回调里的this指向可能会出问题,如果你在代码里用到了this,提前把它存到变量里:

$('.delete-btn').on('click', function(e) {
  e.preventDefault();
  const $currentBtn = $(this); // 提前保存按钮的jQuery对象
  const recordId = $currentBtn.data('id');
  
  // 后续的bootbox和Ajax代码里,用$currentBtn代替this
});

按上面的方法调整后,应该就能解决无断点时二次请求不执行的问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:11:47