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

时间:2012-01-24 03:06:09

标签: javascript settimeout setinterval

我正在学习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请求。

4 个答案:

答案 0 :(得分:4)

移除()setTimeout内的setInterval。将函数名称视为变量,并将其视为您传递的内容。

答案 1 :(得分:3)

  

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

在指定的延迟后,.setTimeout() method会将您传递的函数调用一次。

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

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

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

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

后者不应该起作用,因为它立即调用poll()并将其返回值(undefined)传递给setInterval(),所以我真的不明白为什么它适合你。< / p>

答案 2 :(得分:1)

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

setTimeout("poll()",2000);

或者如果你喜欢使用匿名函数而不是使用eval'd的字符串:

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

我个人更喜欢后者。

答案 3 :(得分:0)

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
  });