【问题标题】:Ajax.BeginForm switches from async to syncAjax.BeginForm 从异步切换到同步
【发布时间】:2013-04-02 03:10:55
【问题描述】:

我遇到了一个问题,即对服务器的异步调用只能工作一次,然后它似乎变成了一个同步调用。让我试着解释一下。

这是一个 MVC 2.0 站点,使用 ASP.NET 和 Ajax。我正在使用 Ajax.BeginForm 助手,如下所示:

<% using (Ajax.BeginForm("Start", null,
new { virtualMachineId = xyz },
new AjaxOptions { UpdateTargetId = "VirtualMachineForm", OnBegin="OnStartingVm" }
)){

然后,当机器启动时,我想回调服务器并每秒获取一次更新。它第一次正常工作,然后改变行为。 OnStartingVm 看起来像这样:

function OnStartingVm() {
    $('#StartingDiv').css('visibility', 'visible');
    $('#StartingDiv').show();
    var vmId = xyz;

    intervalId = setInterval(function () {
        updateStartingStatus(vmId)
    }, 1000);
}
function updateStartingStatus(vmId) {
    /* This part always runs */
    $.ajax({
        url: "/member/vm/getstartingstatus/" + vmId,
        dataType: 'json',
        async: true,
        success: function (data) {
          alert('This part runs every second on the first time only');
           if (data.status == "Running") {
              $('#StartingDiv').text(data.percentComplete);
           }
           else {
              $('#StartingDiv').css('visibility', 'hidden');
              $('#StartingDiv').hide();
              clearInterval(intervalId);
           }
        },
    });
}

在 updateStartingStatus 函数中,第一部分每秒运行一次。但是,在 Ajax 调用中,成功结果仅在第一次时每秒起作用。然后在第二次单击开始按钮时,所有请求都排队了。启动完成后,大约 20 秒后,我收到一堆连续的警报窗口。因此,我可以看出 updateStartingStatus 每次都会每秒运行一次,但 ajax 调用似乎在第一次之后切换为同步调用。

刷新浏览器窗口没有帮助。我必须完全关闭它并再次打开它。 IE 和 Chrome 也是如此。

还有一点需要注意的是,更新后的 div (VirtualMachineForm) 包含了大部分页面,包括被按下的按钮。所以它基本上是从下面替换页面。不确定这是否会导致任何问题。

此外,如果我在 Visual Studio 2010 中进行调试,则在出现问题时不会调用控制器操作。所以,它似乎是客户端的东西。我已经排除了服务器端的任何问题。

【问题讨论】:

    标签: ajax asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    我终于明白了。 This post 导致答案。

    这是与会话状态相关的,浏览器锁定了请求,直到前一个请求完成。我不需要禁用会话状态,但我必须避免从代码中写入会话。

    这解释了为什么浏览器刷新不起作用以及为什么我必须关闭并再次打开浏览器。

    【讨论】:

      【解决方案2】:

      为什么不调用 clearInterval 函数?

      【讨论】:

      • 我确实有它,但在修剪我的代码示例后我没有显示它。我刚刚编辑了我的帖子以包含它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2011-09-07
      • 2019-06-14
      • 1970-01-01
      • 2020-04-05
      • 2014-05-19
      相关资源
      最近更新 更多