首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ajax加载后,setInterval javascript调用不会消失。

问ajax加载后,setInterval javascript调用不会消失。
EN

Stack Overflow用户
提问于 2013-09-26 23:14:13
回答 2查看 1.7K关注 0票数 2

我使用MVC进行部分呈现和ajax调用。在我的一个结果表中,我有一个定时器字段。

下面的代码在我的部分视图上,每30秒呈现一次。其中一个字段是向用户显示的活动计时器:

代码语言:javascript
复制
<td><div id="@someID" class="nobutton"></div><script>setInterval(function () { startTimer('@startDateTime', '@someID') }, 500);</script></td>

这个功能很好,但是在ajax调用以刷新部分之后,interval函数仍然在调用不再存在的旧is (someID)。

以下是计时器的javascript:

代码语言: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>

刷新部分的主页上的调用非常简单:

代码语言:javascript
复制
var t = setInterval(function () {
            $.ajax({
                url: "MYURL",
                type: "GET",
                cache: false,
                success: function (data) {
                    $("#summary").html(data);                    
                }
            });
        }, 30000);

有没有办法杀死那些老家伙?他们为什么还在跑?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-26 23:19:41

代码仍在执行的原因是该间隔从未停止。试着用你的部分来代替。它将检查以前的间隔计时器是否存在并清除它。

代码语言:javascript
复制
<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>

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

代码语言:javascript
复制
<script>
 function clrTimers(){
  var clr = setTimeout(function(){},10);
  for( var i = 0; i < clr; i++ ){
   clearInterval(i);
  }
 }
</script>

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

代码语言:javascript
复制
for( var i = 0; i < clr; i++ ){
 if( i == t ) continue; //I believe t was your ajax interval variable
 clearInterval(i);
}
票数 3
EN

Stack Overflow用户

发布于 2013-09-26 23:19:33

代码语言:javascript
复制
setInterval(function () { startTimer('@startDateTime', '@someID') }, 500);

将继续使用相同的值执行,直到用clearInterval()清除为止。为了清除它,您需要保存一个var并将其提供给clearInterval()函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19040221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档