带进度条的Ajax请求

时间:2017-06-12 09:53:05

标签: javascript jquery ajax

我有一个带有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
  }

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我在这里遇到的问题被称为&#34;会话状态阻止&#34;。此阻塞强制同步调用ajax调用。如果具有相同会话ID的多个用户访问它,则这是一种防止搞砸会话的机制。

在ASP.NET中,我将EnableSessionState设置为&#34; ReadOnly&#34;这解决了这个问题。

请查看this文章以获取更多信息。