将setInterval与$(document).ready一起使用

时间:2014-05-04 16:14:53

标签: javascript jquery html

我试图在加载html页面后调用一个函数。它工作正常,我希望每3秒后调用一次函数,因此为它插入了setInterval()。但是这个功能根本没有被调用。 setInterval()的语法有问题吗??

<html>
<head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>

<script>
$(document).ready( setInterval(function(){f()},3000); );

function f()
{
xhttp=new XMLHttpRequest();
xhttp.open("GET","/anu/get.php",true);
xhttp.send();
xhttp.onreadystatechange = function(){

if(xhttp.readyState==4){
var Display = document.getElementById('new');
Display.innerHTML = xhttp.responseText;
}

}

}

</script>
</head>
<body>

<p id="new"> </p>

<body>

</html>

1 个答案:

答案 0 :(得分:4)

应该是:

$(document).ready(function () {
  setInterval(function(){f()},3000);
});

这里的问题是setInterval returns a number,并且将数字传递给$(document).ready(...)什么都不做。相反,您需要传递$(document).ready(...)一个函数,例如以setInterval调用开始的函数。

另一个问题是你在setInterval之后加了一个分号,但是分号只对语句有效(你可以认为它们是“站在他们自己的行上的东西”)。你只能将表达式传递给像setInterval这样的函数,并且表达式没有分号,所以在右括号之前你的额外分号是一个错误,因为JS引擎看到一个以分号结尾的分号它希望存在无分号表达式的语句。


此外,您可以将其简化为

$(document).ready(function () {
  setInterval(f, 3000);
});

甚至

$(function () {
  setInterval(f, 3000);
});