我在页面上有多个ajax调用。为简洁起见,我们称它们为A,B,C。 “A”需要太长的时间,比如2分钟才能从服务器获取数据(我可以用2分钟)。然而,“B”& “C”响应时间以毫秒为单位。
出于某种原因,AJAX调用在“A”之后排队。即使IE 9可以同时为同一个域提供6个并发请求连接。您可以在下面的屏幕截图中看到并发连接。
“A”需要2分钟然后“B”& “C”进入待定状态,直到“A”完成。
我找到了“ajax_threads.js”http://cmarshall.net/MySoftware/ajax/Threads/,但我不知道这是否会有所帮助。我理解“ajax_threads.js”的方式是它只提供多个连接,这个功能已经存在于modren浏览器中。 IE 7过去常常有2个连接。
这是Javascript:
$(function () { $.ajax({
type: "POST",
url: "Service1.svc/GetDate",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
// Replace the div's content with the page method's return.
$("#Result1").text(msg.d);
}
});
$.ajax({
type: "POST",
url: "Service1.svc/GetDate2",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
// Replace the div's content with the page method's return.
$("#Result2").text(msg.d);
}
}); });
HTML:
<input type="button" id="Button1" value="1"/><div id="Result1"></div>
<br/><input type="button" id="Button2" value="2"/><div id="Result2"></div>
服务器代码:(启用Ajax的WCF)
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1
{
[OperationContract]
public string GetDate()
{
System.Threading.Thread.Sleep(8000);
return DateTime.Now.ToString();
}
[OperationContract]
public string GetDate2()
{
System.Threading.Thread.Sleep(1000);
return DateTime.Now.ToString();
}
}
答案 0 :(得分:2)
我打赌你在服务器上使用ASP.NET Session。使用Sessions时这是标准症状。其原因非常简单,源于ASP.NET Session的设计。它不是线程安全的。所以ASP.NET所做的只是锁定对它的访问。这样做的结果是您不能从同一个Session执行并行请求。它们将完全按照您观察它的方式排队。
解决它的最好方法是简单地摆脱这个可怕的ASP.NET Session。以下是您可以在web.config中添加的内容,以确保项目中没有开发人员犯下使用它的错误:
<system.web>
<sessionState mode="Off" />
...
</system.web>
答案 1 :(得分:0)
没有简单的方法来处理这个问题。我在网上尝试了几个选项。但最好的解决方案是使用ASP.NET“ASP.NET WEBAPI”的新功能。
祝你好运!