JavaScript setInterval()冻结了我的网站

时间:2017-06-20 08:02:06

标签: javascript setinterval

我在Raspberry Pi3中安装了Apache以获取本地网站。 我的index.php中有这个JavaScript,我需要每200ms刷新一次:

function Function()
{
    $.ajax({
        url : 'variable.php',
        data: {action: 'variable'},
        type: 'post',
        success: function(output){
            document.getElementById("demo").innerHTML= output;
            setInterval(Function(),200);
        }
    });
}

variable.php中,它只是一个命令的输出。

但是,在2分钟内,可用内存从220 000 KiB变为40 000 KiB,因此我的网站在10分钟内开始冻结,我必须关闭我的网络并重新打开它。

出了什么问题?

2 个答案:

答案 0 :(得分:6)

它或多或少成为无限递归问题,因为在XHR的每个回调中,您调用Function(因为您在那里有括号,进行调用而不是引用)以及将其设置为被调用每200ms。您应该只将参考传递给那里的函数,而是使用setTimeout()

setTimeout(Function, 200);

此外,Function是函数的错误名称。它还会破坏Function构造函数。

答案 1 :(得分:1)

这是一个递归调用,应该明智地处理。我建议你在Ajax.Success回调上调用递归函数,这将帮助你在前一个Ajax调用成功时调用该函数。并且您将阻止限制您的服务器。