【发布时间】: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