异步函数中setInterval函数的异常在Javascript中调用

时间:2014-01-24 15:08:32

标签: javascript ajax

以下是我准备建立网站的代码片段。


<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秒后继续出现。请帮忙!

3 个答案:

答案 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函数。因此,您会看到第一次调用,之后没有任何内容!