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

ASP.NET MVC+jQuery Ajax:解决两个Ajax请求无法同时执行的问题

解决方案:让ASP.NET MVC中的Ajax请求并行执行

看起来你的问题核心是两个Ajax请求被串行执行了——第二个必须等第一个耗时的统计请求完成才能触发。要实现并行执行,我们需要从前端请求逻辑和后端并发支持两个方面调整:

一、前端:确保请求异步且独立触发

首先排查你的现有代码,大概率是下面两种情况导致串行:

  1. 第二个请求被嵌套在第一个请求的success回调里;
  2. 错误地设置了async: false(同步请求会阻塞后续所有操作)。

修复后的代码示例:

1. 独立发起耗时的统计请求

页面加载时直接发起这个请求,不需要等待它完成:

// 页面加载后立即发起统计请求,后台默默执行
$(document).ready(function() {
    $.ajax({
        url: '/Stats/GetTotalRecords',
        type: 'GET',
        async: true, // jQuery默认就是true,显式声明更清晰
        success: function(total) {
            // 请求完成后再更新页面统计数据
            $('#total-count').text(`总记录数:${total}`);
        },
        error: function(xhr, status, err) {
            console.warn('统计请求失败:', err);
        }
    });
});

2. 按钮点击独立触发编辑Dto请求

把编辑请求的逻辑直接绑定到按钮点击事件,完全不受统计请求的影响:

// 绑定编辑按钮的点击事件,用户一点就发起请求
$('#open-edit-card-btn').on('click', function() {
    $.ajax({
        url: '/Edit/GetEditModel',
        type: 'GET',
        async: true,
        success: function(dto) {
            // 拿到Dto后立刻打开编辑卡片
            renderEditCard(dto);
        },
        error: function(xhr, status, err) {
            alert('获取编辑数据失败,请稍后重试');
        }
    });
});

关键是不要把第二个请求放在第一个请求的回调函数里,让两者的触发逻辑完全独立——这样页面加载时统计请求在后台跑,用户随时点击按钮都能立刻发起第二个请求,不用等统计完成。

二、后端:解除Session的并发限制

如果前端调整后还是串行,那大概率是ASP.NET的Session锁定问题——默认情况下,同一个用户的多个请求会因为Session独占而被串行处理(ASP.NET为了保证Session的一致性,会给每个用户的请求加锁)。

解决方法分两种情况:

  • 如果你的控制器不需要使用Session,直接禁用Session:
[SessionState(SessionStateBehavior.Disabled)]
public class StatsController : Controller
{
    public ActionResult GetTotalRecords()
    {
        // 模拟5-7秒的耗时操作
        System.Threading.Thread.Sleep(6000);
        return Json(15678, JsonRequestBehavior.AllowGet);
    }
}
  • 如果只需要读取Session(不需要修改),设置为只读Session:
[SessionState(SessionStateBehavior.ReadOnly)]
public class EditController : Controller
{
    public ActionResult GetEditModel()
    {
        // 快速返回编辑Dto
        var editDto = new { Id = 123, Title = "测试编辑项", Content = "示例内容" };
        return Json(editDto, JsonRequestBehavior.AllowGet);
    }
}

设置后,同一个用户的多个请求就能在后端并行处理了,不会因为Session锁导致串行。

总结

只要做到这两点:

  • 前端请求异步且独立触发,不嵌套回调
  • 后端解除Session的并发限制
    就能实现两个请求同时执行,用户点击编辑按钮时无需等待统计请求完成,直接就能打开编辑卡片进行操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:25:43