我正在学习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请求。
答案 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
});