我在页面上有多个 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”的方式是它只提供多个连接,该功能已经存在于现代浏览器中。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();
}
}