Я думаю, что таймер останавливается при обратной передаче (нажатие кнопки) и будет запускаться снова только после возврата этой обратной передачи. Одним из решений этой проблемы является использование PageMethods вместо таймера, но вы можете сделать статические функции только PageMethod. Для примера это будет работать так:
[WebMethod()] public static string GetTime(){
Return DateTime.Now.ToString();
}
HTML и JavaScript (JQuery):
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Submit_Click" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<script type="text/javascript">
function OnSuccess(result, ctrl) { $('#<%=Label1.ClientID %>').html(result); }
function OnError() { alert("error!"); }
$(document).ready(function() {
setInterval(function() { PageMethods.GetTime(OnSuccess, OnError); }, 700)
});
</script>
</form>
</body>
Не забудьте установить EnablePageMethods = "true" при использовании веб-методов!
Во время тестирования я заметил, что ответ был медленнее, чем SetTimeout, запускающий новый вызов ajax, поэтому страница быстро создает работающие соединения, это может быть из-за того, что мой сервер разработки работает немного медленно. Чтобы исправить это, вы не должны обновляться так часто, раз в 5 секунд придется делать это.
Полагаю, таймер asp.net уже предотвращает такое поведение: он останавливается, когда выполняется другой вызов ajax. Такое поведение вызывает проблему, которую вы испытываете, кнопка обратной передачи блокирует обновления таймера.