MVC多个jquery.ajax一个接一个的等待

Posted

技术标签:

【中文标题】MVC多个jquery.ajax一个接一个的等待【英文标题】:MVC multiple jquery.ajax waiting one after another 【发布时间】:2021-08-28 10:59:21 【问题描述】:

好的,我认为我有多个 $.ajax。它们都链接到同一个控制器/动作(但具有不同的参数值)。

$("#div1").load(url + "?myParam=1");
$("#div2").load(url + "?myParam=2");

当然,我这样做是为了让它们独立加载,以获得更好的加载时间。

这是我的控制器操作:

public PartialViewResult MyAction(int myParam)
var reader = new Reader(this.ConnectionString);
string output;
switch (myParam)

case 1:
    Thread.Sleep(15000);
    output = reader.Get("One");
case 2:
    output = reader.Get("Two")


看到那边的 Thread.Sleep 了吗? 好吧,我原以为第二个 div 会立即加载,但你猜怎么着,它会等待第一个 div 完成。

读者做了一些 EntityFramework 的东西

public string Get(string input)
 using var ctx = new Entities();
 
 return ctx.Something.Where(s => s.Whatever == input).Id;

【问题讨论】:

这是因为服务器限制了每个客户端的并发连接数,以防止DDOS等攻击。这就是为什么最好发送一个返回所有必要信息的 AJAX 请求,而不是发送大量具有更精细细节的 AJAX 请求。另外,为了清楚起见,我确信这只是测试,在网络服务器上使用 Thread.Sleep() 是非常糟糕的做法。 您能详细说明一下吗?默认值是什么,我可以从哪里更改它?不过,我怀疑默认设置是每个客户端 1 个连接。我在 IIS(已发布)和 IIS Express(开发)上都有这个问题。 【参考方案1】:

这是因为会话。同一用户的会话访问是按顺序进行的。需要用 [SessionState(SessionStateBehavior.Disabled)] 装饰操作(但他们无权访问 Session)

对 ASP.NET 会话状态的访问是每个会话独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。但是,如果对同一个会话发出两个并发请求(通过使用相同的 SessionID 值),则第一个请求将获得对会话信息的独占访问权。第二个请求只有在第一个请求完成后才会执行。

【讨论】:

ASP.NET Core 中似乎不再存在这个问题了?‍♀️

以上是关于MVC多个jquery.ajax一个接一个的等待的主要内容,如果未能解决你的问题,请参考以下文章

异步等待 Jquery ajax 回调?

MVC 3 / Jquery AJAX / Session Expires / C# - 在 ajax 调用期间处理会话超时

如何解决jquery+ajax 网页title总时显示成"正在等待..."

如何使用 jQuery 和 ASP.NET MVC 从 AJAX 调用返回错误消息?

使用 JSON 结果填充下拉列表 - 使用 MVC3、JQuery、Ajax、JSON 的级联下拉

使用 jQuery $.ajax 进行 ASP.NET MVC 验证