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一个接一个的等待的主要内容,如果未能解决你的问题,请参考以下文章
MVC 3 / Jquery AJAX / Session Expires / C# - 在 ajax 调用期间处理会话超时
如何解决jquery+ajax 网页title总时显示成"正在等待..."
如何使用 jQuery 和 ASP.NET MVC 从 AJAX 调用返回错误消息?