Javascript 如何让函数'clearInterval'本身?

Javascript 如何让函数'clearInterval'本身?,javascript,ajax,setinterval,clearinterval,Javascript,Ajax,Setinterval,Clearinterval,在我的代码中,我将此函数称为: function call_bid_button(id) { bid_button(id); var refreshIntervalId = setInterval(function(){bid_button(id)},1000); } 如您所见,它调用函数bid_button(),并为其设置一个间隔 我想要bid\u按钮()为自己激活clearInterval()。这里有bid\u按钮(): 如您所见,我试图从另一个函数调用clearInter

在我的代码中,我将此函数称为:

function call_bid_button(id)
{
    bid_button(id);
    var refreshIntervalId = setInterval(function(){bid_button(id)},1000);
}
如您所见,它调用函数
bid_button()
,并为其设置一个
间隔

我想要
bid\u按钮()
为自己激活
clearInterval()
。这里有
bid\u按钮()

如您所见,我试图从另一个函数调用
clearInterval()
。显然,这是行不通的。但正确的方法是什么


谢谢

refreshIntervalId
设置为全局变量,或者至少在这两个函数的范围内

var refreshIntervalId;

function call_bid_button(id)
{
    bid_button(id);
    refreshIntervalId = setInterval(function(){bid_button(id)},1000);
}

function bid_button(id)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200 && xmlhttp.responseText=='')
    {
        document.getElementById("bid_button").innerHTML=xmlhttp.responseText;
        clearInterval(refreshIntervalId);
    }

    }
    xmlhttp.open("GET","the_bid_button.php?id="+id,true);
    xmlhttp.send(); 
    return false;
}

refreshIntervalId
设置为全局变量,或至少在两个函数的范围内

var refreshIntervalId;

function call_bid_button(id)
{
    bid_button(id);
    refreshIntervalId = setInterval(function(){bid_button(id)},1000);
}

function bid_button(id)
{
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
    if (xmlhttp.readyState==4 && xmlhttp.status==200 && xmlhttp.responseText=='')
    {
        document.getElementById("bid_button").innerHTML=xmlhttp.responseText;
        clearInterval(refreshIntervalId);
    }

    }
    xmlhttp.open("GET","the_bid_button.php?id="+id,true);
    xmlhttp.send(); 
    return false;
}
当这一切结束时,只要你不再打电话,它就结束了。如果你是

如果计时器被包装在另一个函数中,
var
将其作用域限定到该函数。您可以删除它以使其成为全局变量,也可以稍后在包装函数的相同范围内执行它

当这一切结束时,只要你不再打电话,它就结束了。如果你是


如果计时器被包装在另一个函数中,
var
将其作用域限定到该函数。您可以删除它以使其成为全局变量,也可以稍后在包装函数的相同范围内执行它。

您实际上只需传递对间隔的引用:

var interval_id;
interval_id = setInterval(function(){bid_button(id, interval_id); },1000);

function bid_button (id, interval_id) {
    clearInterval(interval_id);
}
这是因为间隔中的回调函数稍后调用


请记住,由于
bid_按钮
的执行方式,某些间隔可能无法清除。例如,如果你失去了互联网连接,它会不断尝试。请求将通过
status=0
解决。实际上,您只需传递一个对间隔的引用:

var interval_id;
interval_id = setInterval(function(){bid_button(id, interval_id); },1000);

function bid_button (id, interval_id) {
    clearInterval(interval_id);
}
这是因为间隔中的回调函数稍后调用


请记住,由于
bid_按钮
的执行方式,某些间隔可能无法清除。例如,如果你失去了互联网连接,它会不断尝试。如果每间隔多次调用
bid_按钮
,请求将以
status=0

解决,其中一些请求将不会被清除。我不推荐这种解决方案。“使用全局变量”应该会触发一些警报。如果您每间隔多次调用
bid_按钮
,其中一些将不会被清除。我不推荐这种解决方案。“使用全局变量”应该会引起一些警钟。我想过,但我认为它不会起作用。现在我明白为什么它会起作用了。谢谢你我考虑过了,但我认为这不管用。现在我明白为什么它会起作用了。非常感谢。
var interval_id;
interval_id = setInterval(function(){bid_button(id, interval_id); },1000);

function bid_button (id, interval_id) {
    clearInterval(interval_id);
}