我遇到了一個異步調用到服務器的問題,只有一次工作,然後它似乎成爲一個同步調用。讓我試着解釋一下。Ajax.BeginForm從異步切換到同步
這是一個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中進行調試,則在發生問題時不會對控制器操作進行調用。所以,它似乎是客戶端的東西。我排除了服務器端的任何問題。
我確實在那裏,但我修剪我的代碼示例後沒有顯示它。我剛剛編輯我的文章,以包括它。 – 2010-12-09 16:29:13