【发布时间】:2012-03-12 01:50:37
【问题描述】:
我有一个在客户端实现了 jquery 的 ASP.Net Web 应用程序。在 while 循环中,客户端 jquery 脚本对服务器端代码中的 Web 方法进行异步调用。该调用返回 jquery 用来更新用户的长时间运行的服务器端任务的状态。目标是让 jquery 重复调用服务器,直到状态完成,一旦完成,它就会退出 while 循环并通知用户任务完成。
我的问题是下面的代码在 while 循环中运行,但我想让它在每次调用之间延迟或休眠,以防止状态请求使服务器不堪重负。我尝试在下面的代码中调用 setTimeout,但它只适用于初始 ajax 调用,每个后续调用都背靠背发生。有没有办法有效地延迟对服务器的每次后续调用?这是实现我所描述的那种行为的最有效方法吗?理想情况下,我希望每次通话之间有 2-5 秒的延迟。
我有以下代码
客户端 Jquery:
var alertTimerId;
$('input[name=btnStatus]').click(function () {
var result = false;
//Loop while server reports task complete is true
while (!result) {
alertTimerId = setTimeout(function () {
$.ajax({
type: "POST",
url: "Default.aspx/GetStatus",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
if(msg.d != false)
result = msg.d;
},
error: function (xhr, ajaxOptions, thrownError) {
alert('AJAX failure');
}
});
}, 2000);
if (count > 0) {
count--;
}
}
});
服务器端 ASP
[System.Web.Services.WebMethod]
public static bool GetStatus()
{
return result;
}
【问题讨论】:
标签: javascript jquery asp.net ajax