我有一个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并排
感谢您能否帮我看看我在这里缺少的东西。
答案 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
。