javascript - ajax 加载后 setInterval javascript 调用不会消失

标签 javascript jquery ajax asp.net-mvc partial-views

我将 MVC 与部分渲染和 ajax 调用结合使用。在我的一个结果表中,我有一个计时器字段。

以下代码在我每 30 秒呈现一次的局部 View 上。其中一个字段是向用户显示的事件计时器:

<td><div id="@someID" class="nobutton"></div><script>setInterval(function () { startTimer('@startDateTime', '@someID') }, 500);</script></td>

这很好用,但是在调用 ajax 刷新部分后,间隔函数仍在调用不再存在的旧 ID (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);

有没有办法杀死老前辈?为什么它们还在运行?

最佳答案

代码仍在执行的原因是间隔从未停止。在你的局部尝试这个。它将检查先前的间隔计时器是否存在并将其清除。

<td><div id="@someID" class="nobutton"></div>
<script>
 if( window.prtInt != void 0 ) clearInterval(window.prtInt);//void 0 means undefined
 window.prtInt = setInterval(function () { startTimer('@startDateTime', '@someID') }, 500);
</script></td>

如果您希望清除整个页面上的所有计时器(可能会产生不良影响),那么您可以获取新计时器的整数,并循环到仍然存在的那个数字清除间隔。

<script>
 function clrTimers(){
  var clr = setTimeout(function(){},10);
  for( var i = 0; i < clr; i++ ){
   clearInterval(i);
  }
 }
</script>

如果你想跳过一些,如果你知道的话,你可以用 continue 关键字包括它们。比如

for( var i = 0; i < clr; i++ ){
 if( i == t ) continue; //I believe t was your ajax interval variable
 clearInterval(i);
}

关于javascript - ajax 加载后 setInterval javascript 调用不会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040221/

相关文章:

javascript - JQuery Ajax 获取转换说明

javascript - 如何在cluetip中引用trigger元素?

javascript - selenium-webdriver:如何在 javascript 中使用 driver.quit()

javascript - Bootstrap3 popover data-trigger=focus 在弹出窗口中单击 <select> 输入时关闭弹出窗口

javascript - 修改href属性

javascript - 使用 jQuery 通过 try 和 catch 验证用户输入

jquery - Google map v3 在左上角部分加载,调整大小事件不起作用

php - 请求: minimal framework for web-apps

php - 上下文相关帮助 - PHP 类

javascript - 返回 PartialView 时在脚本内使用 TempData