我使用MVC一些局部渲染和ajax調用。在我的一個結果表中,我有一個定時器字段。setInterval javascript調用不會消失後ajax加載
以下代碼位於每30秒呈現的部分視圖中。其中一個字段是一個積極的計時器顯示給用戶:
<td><div id="@someID" class="nobutton"></div><script>setInterval(function() { startTimer('@startDateTime', '@someID') }, 500);</script></td>
這個偉大的工程,但AJAX調用,以刷新部分後,間隔功能仍然調用舊編號(someID),其不再存在。
下面是計時器的JavaScript:
<script type="text/javascript">
function startTime(dt, field){
var field = document.getElementById(field);
if (field == null)
return;
var rowTime = new Date(dt);
var rowTimems = rowTime.getTime(rowTime);
var currentTime = new Date();
var currentTimems = currentTime.getTime(currentTime);
var difference = currentTimems - rowTimems;
var hours = Math.floor(difference/36e5),
minutes = Math.floor(difference % 36e5/60000),
seconds = Math.floor(difference % 60000/1000);
field.innerHTML = formatTime(hours) + ":" + formatTime(minutes) + ":" + formatTime(seconds);
</script>
這刷新部分的主網頁上的呼叫是非常簡單的:
var t = setInterval(function() {
$.ajax({
url: "MYURL",
type: "GET",
cache: false,
success: function (data) {
$("#summary").html(data);
}
});
}, 30000);
有沒有辦法殺老計時器?他們爲什麼還在跑?
您需要在再次執行ajax刷新之前清除間隔。 – PSL