我在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分钟内开始冻结,我必须关闭我的网络并重新打开它。
出了什么问题?
答案 0 :(得分:6)
它或多或少成为无限递归问题,因为在XHR的每个回调中,您调用Function
(因为您在那里有括号,进行调用而不是引用)以及将其设置为被调用每200ms。您应该只将参考传递给那里的函数,而是使用setTimeout()
。
setTimeout(Function, 200);
此外,Function
是函数的错误名称。它还会破坏Function
构造函数。
答案 1 :(得分:1)
这是一个递归调用,应该明智地处理。我建议你在Ajax.Success回调上调用递归函数,这将帮助你在前一个Ajax调用成功时调用该函数。并且您将阻止限制您的服务器。