【问题标题】:MVC multiple jquery.ajax waiting one after anotherMVC多个jquery.ajax一个接一个的等待
【发布时间】: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(开发)上都有这个问题。

标签: c# jquery asp.net asp.net-mvc


【解决方案1】:

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

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

【讨论】:

  • ASP.NET Core 中似乎不再存在这个问题了?‍♀️
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2011-07-21
  • 2019-02-16
  • 1970-01-01
  • 2016-11-13
  • 2016-08-09
  • 2014-02-20
相关资源
最近更新 更多