[英]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请求。
删除setTimeout
或setInterval
的()
。 将函数名称视为变量,这就是您传递的内容。
“我试图让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.