繁体   English   中英

js setInterval正在工作,但setTimeout不工作

[英]js setInterval is working but setTimeout isn't

我正在学习setTimeout vs setInterval,我有setInterval工作,但没有setTimeout。 例如,这不起作用:

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Brewery</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
        <script type="text/javascript"> 
        function doNothing()
        {
            var t = "hello wolrd";
        }

        function poll(){
        $.ajax({
            //url: "http://192.168.0.11/"+Math.random(),
            url:"line-ajax.htm",
            contentType:"text/html",
            success: 'doNothing()'
        });
        }

        setTimeout(poll(),2000);
        </script>
        <link rel="stylesheet" type="text/css" href="http://www.highcharts.com/highslide/highslide.css" />
    </head>
    <body>
        <div id="container" style="width: 1200px; height: 500px; margin: 0 auto"></div>             
    </body>
</html>

但如果我只改变这个

setTimeout(poll(),2000);

setInterval(poll(),2000);

它会每2秒做一次ajax请求......

到底是怎么回事?

---编辑我也试过setTimeout(poll,2000); 但这也不会每2秒发出一次ajax请求。

删除setTimeoutsetInterval() 将函数名称视为变量,这就是您传递的内容。

“我试图让setTimeout每隔2秒调用'poll'函数,它不是”

.setTimeout()方法在指定的延迟之后调用您传递一次的函数。

.setInterval()方法调用您重复传递的函数,每次调用之间都有指定的延迟。

从更新到您的问题,您似乎认为他们都做同样的事情。 请阅读我链接到的doco。

请注意,您必须传递一个函数引用(或要进行eval'd的字符串),所以说:

setInterval(poll, 2000);
// NOT
setInterval(poll(), 2000);

后者不应该工作,因为它立即调用poll()并将其返回值( undefined )传递给setInterval() ,所以我真的不明白为什么它对你有用。

由于setTimeout的参数是eval'd,你应该尝试这样:

setTimeout("poll()",2000);

或者,如果您希望使用匿名函数比使用eval'd的字符串更好:

setTimeout(function() {
  poll();
},2000);

我个人更喜欢后者。

setTimeout()的第一个参数应该是要调用的函数的引用,而不是带()的函数调用。 所以尝试:

setTimeout(poll, 2000);
//-----------^^^
// No parentheses...

同样,在$.ajax()调用中, success函数应该是函数指针,而不是字符串:

$.ajax({
        //url: "http://192.168.0.11/"+Math.random(),
        url:"line-ajax.htm",
        contentType:"text/html",
        // Function pointer to doNothing
        success: doNothing
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM