浏览器在ajax调用时冻结

时间:2010-06-07 13:55:37

标签: .net javascript jquery asp.net-mvc

我有一个ASP.NET Web App。我注意到,虽然正在进行简单的ajax调用(见下文),但Web应用程序不会响应我在其他浏览器上尝试的任何操作。

$.ajax({
        type: "GET",
        async: true,
        url: "someurl",
        dataType: "text",
        cache: false,
        success: function(msg){
            CheckResponse(msg);
        }
    });

当我打开两个Firefox或两个IE时会发生这种情况。我运行在第一个浏览器上执行ajax调用的函数,直到返回ajax的响应,我在同一站点上的第二个浏览器上无法执行任何操作。从第二个浏览器到服务器上没有断点,直到初始ajax完成。它会挂起任何点击等。

在第一个浏览器完成ajax调用后,第二个浏览器上的挂起立即结束。

如果我在IE和Firefox上并排尝试相同,则不会出现此行为。只发生在IE& IE或FF& FF并排

感谢您能否帮我看看我在这里缺少的东西。

2 个答案:

答案 0 :(得分:1)

听起来像Apache(或您运行的任何网络服务器)一次只能为每个客户端处理一个请求。处理Ajax请求时,Apache会对来自同一客户端的所有其他请求进行排队。

此外,当使用两种不同的浏览器时,您的服务器会将每个浏览器视为不同的客户端,这意味着它将为每个浏览器处理一个请求。我不确切知道用​​什么信息来识别客户端(我的猜测是IP地址+浏览器版本,但我在这里可能会非常错误)

其他人可能会告诉您如何配置Apache来解决此问题;不幸的是我自己也不知道。问题不在于Javascript / Ajax;它是服务器而不是客户端施加的限制。

答案 1 :(得分:0)

“someurl”在服务器上阻塞,直到第一个请求完成任何给定会话的 。当您拥有完全独立的浏览器时,问题不会显现,因为在该场景中有两个单独的ASP.NET会话。按照设计,当同一客户端对配置为能够写入Session的资源(Pages的默认值)发出多个请求时,ASP.NET会执行请求排队。根据您的描述, 正在发生的事情。

<强>解决方案:

  • 对于某个页面,您可以添加EnableSessionState="false"EnableSessionState="ReadOnly"指令@ Page
  • 对于通用处理程序,您可以通过删除来解决问题 IRequiresSessionState或将其替换为IReadOnlySessionState