以下是我准备建立网站的代码片段。
<script type="text/javaScript">
function h(d) {
console.log("hello");
return;
};
function func(callback) {
var httpRequest; // create our XMLHttpRequest object
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// Internet Explorer old versions
httpRequest = new
ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.onreadystatechange = function() {
// inline function to check the status
if (httpRequest.readyState === 4 &&
httpRequest.status === 200) {
callback(httpRequest.responseText);
// call the callback function
}
};
httpRequest.open("GET", '/try_ajax',true);
httpRequest.send();
}
// call the function
setInterval(func(h), 10000); // Timer is triggered here
</script>
有趣的是,虽然我已将间隔设置为10秒,但在我的控制台中,“你好”只出现一次。但它应该在10秒后继续出现。请帮忙!
答案 0 :(得分:2)
这是错误的
setInterval(func(h), 10000); // Timer is triggered here
您说要从func(h)
获取任何内容,并将其分配给超时
setInterval(function(){func(h);}, 10000); // Timer is triggered here
答案 1 :(得分:2)
您实际上是在setInterval调用中调用该函数,这不是您想要的。你应该只提供它的引用并将参数作为最后的参数,如下所示:
setInterval(func, 10000, h); // Timer is triggered here
我想对那些指出OP希望通过回调获得额外参数的人表示敬意,这是我在最初的答案中完全错过的。
答案 2 :(得分:0)
事情的真相是 - 当你做
时setInterval(func(h), 10000)
每10秒调用func(h)
的返回值。您的func(h)
返回无效。因此,在第一次调用之后生效,没有什么可以调用setInterval
函数。因此,您会看到第一次调用,之后没有任何内容!