У меня проблема с асинхронным вызовом к серверу, который работает только один раз, затем он становится синхронным вызовом.Позвольте мне попытаться объяснить.
Это сайт 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, вызов контроллера не выполняется при возникновении проблемы.Так что, похоже, что-то на стороне клиента.Я исключил любые проблемы на стороне сервера.