Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript超时()的正确方法_Javascript_Timeout - Fatal编程技术网

使用javascript超时()的正确方法

使用javascript超时()的正确方法,javascript,timeout,Javascript,Timeout,例如,如果我要按如下方式格式化代码 <script type="text/javascript"> var timeout; function auto() { $.ajax({ url: "functions/ajax.php", data: "func=auto", type: "GET", dataType: "json

例如,如果我要按如下方式格式化代码

<script type="text/javascript">
    var timeout;
    function auto() {
        $.ajax({
                url: "functions/ajax.php",
                data: "func=auto",
                type: "GET",
                dataType: "json",
                success: function(data){
                       $.each(data.search, function (i, v) {
                               console.log('Success ' + v);
                       });
                },
                error: function (jqXHR, textStatus, errorThrown){
                       console.log('Error ' + jqXHR);
                }
        });
     }

    function start() {
    timeout = setTimeout('auto()', 2000);
    }

    function stop(){
        clearTimeout(timeout);
}
</script>

var超时;
函数auto(){
$.ajax({
url:“functions/ajax.php”,
数据:“func=auto”,
键入:“获取”,
数据类型:“json”,
成功:功能(数据){
$.each(数据搜索、函数(i、v){
console.log('Success'+v);
});
},
错误:函数(jqXHR、textStatus、errorshown){
console.log('Error'+jqXHR);
}
});
}
函数start(){
timeout=setTimeout('auto()',2000);
}
函数停止(){
clearTimeout(超时);
}

我的
var timeout
不是由值定义的,这有关系吗?由于实际超时甚至没有处理,它运行函数
auto()
一次,然后首先停止,不要在setTimeout中使用引号(我不确定,但我相信调用
eval()
),只需通过引用传入函数:
setTimeout(auto,2000)

其次,JavaScript是一种动态类型的语言,这意味着变量没有固定的类型,它们可以根据环境而变化,因此您的代码是完全有效的


最后,如果您不打算在超时计数时中止超时,则无需清除它,因为它在执行后将消失。

我不理解这个问题。您的代码看起来很好,有什么问题?超时没有处理,它运行错误的代码,然后在2秒后不再“自动”运行(顺便说一句,作为参考,
setTimeout('somejavascript',time)
做事情的方式已经有十年了。你可以说
setTimeout(auto,2000)
。甚至可以说
setTimeout(function(){/*auto()函数中的所有代码!*/},2000)
,甚至不必命名函数……)谢谢您提供的这些信息,但是我的代码没有激活函数的setTimeout,它只运行一次代码,然后停止。您可能正在查找setInterval,只需将setTimeout替换为setInterval,它将每2秒重复一次该函数。setTimeout只触发一次。正如@MattDiamant所说,如果您需要每2000毫秒运行一次在2000ms后,使用
setInterval(自动,2000)
相反。但是,要小心,你确实需要清除一个时间间隔以使其停止,否则它将无限期地运行。这太完美了!你们都是很棒的家伙,有令人惊讶的解释,可以清除所有内容!只需一个小细节,如果你想在一个循环结束和下一个循环开始之间寻找一个特定的时间间隔,它会更精确urate在函数结束时使用setTimeout,而不是setInterval。但是,在这种情况下,对于2000ms,它没有任何区别。