我有一个带有html按钮的页面。只要用户单击此按钮,就会调用ajax调用,并且计数器会在服务器端递增。出于测试原因,计数器会递增,直到值为170。
function StartCounter() {
//call back function
var intervalID = setInterval(updateProgress, 250);
$.ajax({
url: "ProjectPreparation.aspx/MoveToPlannedClients",
data: "",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (result) {
clearInterval(intervalID);
},
error: function (xhr, status) {
clearInterval(intervalID);
}
});
return false;
}
我想要实现的是显示服务器端计数器的进度。因此,我调用一个名为“updateProgress()”的方法,该方法每250毫秒进行一次ajax调用以获取计数器的当前值。
function updateProgress() {
$.ajax({
type: "POST",
url: "ProjectPreparation.aspx/ProgressState",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (msg) {
alert("The current value of the counter is" + msg.d);
}
});
}
现在问题是在StartCounter()的ajax调用完成后,updateProgress()的多个ajax调用返回。即警报窗口仅显示计数器的最终结果,而不显示中间值。
这是应该返回当前进度的服务器端asp.net方法:
/// <summary>
/// Callback function to get
/// current progress state
[WebMethod]
public static int ProgressState()
{
return CurrentValue;
}
这是反方法:
[WebMethod]
public static void MoveToPlannedClients()
{
CurrentValue++;
Thread.Sleep(500); //To slow things down a bit
}
非常感谢任何帮助。
答案 0 :(得分:0)
我在这里遇到的问题被称为&#34;会话状态阻止&#34;。此阻塞强制同步调用ajax调用。如果具有相同会话ID的多个用户访问它,则这是一种防止搞砸会话的机制。
在ASP.NET中,我将EnableSessionState设置为&#34; ReadOnly&#34;这解决了这个问题。
请查看this文章以获取更多信息。