Javascript 为什么';setInterval功能是否停止?

Javascript 为什么';setInterval功能是否停止?,javascript,jquery,Javascript,Jquery,我正试图清除每15秒运行一次的时间间隔 以下是ajax请求: function extras() { $x = { action:'extras' }; var r; $.ajax({ type:'POST', url:'services.php', data:$x, beforeSend:function() { $('input[name="stop_"]

我正试图清除每15秒运行一次的时间间隔

以下是ajax请求:

function extras()
{
    $x = {
        action:'extras'
    }; 
    var r;
    $.ajax({
        type:'POST',
        url:'services.php',
        data:$x,
        beforeSend:function() {
            $('input[name="stop_"]').trigger("click");
        },
        success:function(response) {
            r = response;   
            //console.log(response)
        },
        complete:function() {
            console.log(r);                 
            $('input[name="re_start"]').trigger("click");
        }
    }); 
}
因此,在我的按钮
重新开始
停止
中,我有:

$('input[name="re_start"]').click(function (event) {
    event.preventDefault();
    clearInterval(check);
    var check = setInterval(function() {
        extras();
    },15000);
    console.log('Starting again...');
});

$('input[name="stop_"]').click(function (event) {
    event.preventDefault();
    clearInterval(check);
    console.log('Stop');
});
在jQuery中的DOM中,我初始化函数
extras()
,并将其保存在一个名为“check”的变量中,在该变量中我初始化时间间隔,如下所示:

<input type="button" style="display:none;" name="re_start">
<input type="button" style="display:none;" name="stop_">

<script type="text/javascript">
    (function() {
        extras();
        var check = setInterval(function() {
            extras();
        },15000);   
    })();
    function extras()
    {
        $x = {
            action:'extras'
        }; 
        var r;
        $.ajax({
            type:'POST',
            url:'services.php',
            data:$x,
            beforeSend:function() {
                $('input[name="stop_"]').trigger("click");
            },
            success:function(response) {
                r = response;   
                //console.log(response)
            },
            complete:function() {
                console.log(r);
                //message_smart(r);                     
                $('input[name="re_start"]').trigger("click");
            }
        }); 
    }   
</script>

(功能(){
额外费用();
var check=setInterval(函数(){
额外费用();
},15000);   
})();
函数附加()
{
$x={
行动:“额外的”
}; 
var-r;
$.ajax({
类型:'POST',
url:'services.php',
数据:x美元,
beforeSend:function(){
$('input[name=“stop”]”)。触发器(“单击”);
},
成功:功能(响应){
r=响应;
//console.log(响应)
},
完成:函数(){
控制台日志(r);
//信息智能(r);
$('input[name=“re_start”]”)。触发器(“单击”);
}
}); 
}   
然后我不明白为什么前30秒起作用,当它们超过60秒时,似乎开始一次做两次,然后是三次,依此类推!似乎如果我每秒钟改变一次间隔,就会跑得越来越快。问题出在哪里?

问题出在这里:

(function() {
    extras();
    var check = setInterval(function() {
        extras();
    },15000);   
})();
您正在一个新的函数作用域中创建一个变量
check
,在该作用域之外无法访问该变量。在javascript中有一个很好的范围示例。另外你可以看到

现在要解决您的问题,您需要将
check
变量放在全局范围内,以便删除函数包装器

extras();
var check = setInterval(function() {
    extras();
},15000);  
您还需要更改重新启动处理程序以重新分配变量,如下所示:

$('input[name="re_start"]').click(function (event) {
    event.preventDefault();
    clearInterval(check);
    check = setInterval(function() {
        extras();
    },15000);
    console.log('Starting again...');
});
现在,它们都应该使用相同的
check
变量,并在清除超时时按预期工作。

问题在于:

(function() {
    extras();
    var check = setInterval(function() {
        extras();
    },15000);   
})();
您正在一个新的函数作用域中创建一个变量
check
,在该作用域之外无法访问该变量。在javascript中有一个很好的范围示例。另外你可以看到

现在要解决您的问题,您需要将
check
变量放在全局范围内,以便删除函数包装器

extras();
var check = setInterval(function() {
    extras();
},15000);  
您还需要更改重新启动处理程序以重新分配变量,如下所示:

$('input[name="re_start"]').click(function (event) {
    event.preventDefault();
    clearInterval(check);
    check = setInterval(function() {
        extras();
    },15000);
    console.log('Starting again...');
});

现在,它们都应该使用相同的
check
变量,并在清除超时时按预期工作。

check
不在第二个单击处理程序的范围内…感谢您的回答。你怎么知道的?我的意思是,当AJAX在complete函数中完成时,我正在重新启动setInterval,在发送之前,我停止了最后一个setInterval。
check
不在第二个单击处理程序的范围内……感谢您的回答。你怎么知道的?我的意思是,当AJAX完成完整函数时,我将重新启动setInterval,在发送之前,我将停止最后一个setInterval。非常感谢。我从没想过问题出在全局变量上。我的问题是解决。你好,非常感谢。我从没想过问题出在全局变量上。我的问题是解决。问候语。