[英]Weird behavior with SetTimeout
我试图每 20 秒用 JavaScript 刷新一个 div。 这是我的代码:
$(document).ready(function(){
refreshTable();
updateTable();
});
function updateTable(){
setTimeout( refreshTable, 20000);
updateTable();
}
function refreshTable(){
$('#table_list').load('table')
}
一旦页面准备好,我就可以开始倒计时了。 但是这段代码每 3 秒更新一次表。 有人能帮我吗? 我究竟做错了什么?
Ps:我在这里看到这是一个常见问题,但是我看到的任何问题都可以帮助我。
你有无限递归:
function updateTable(){
setTimeout( refreshTable, 20000);
updateTable(); // Infinite recursion.
}
您应该使用 setIinterval 而不是进行 setTimeout 循环。
当文档准备好时,您调用updateTable
。
20秒后,它会调用refreshTable
但它会立即调用updateTable
一次。 所以排队的另一个refreshTable
,然后点击updateTable
一次。 这使它陷入无限循环……或者至少进入堆栈溢出。
您需要:
updateTable
从内refreshTable
而不是updateTable
ready
处理程序中使用setInterval
而不是使用setTimeout
正如其他答案所指出的那样,您的 updateTable 函数中有无限递归。 您可以改为使用 setInterval,它会定期运行指定的 refreshTable 函数:
$(document).ready(function(){
refreshTable();
setInterval(refreshTable, 2000)
});
function refreshTable(){
$('#table_list').load('table')
}
$(document).ready(function(){
window.setInterval( function(){
$('#table_list').load('table');
}, 20000);
});
这可能会帮助你,至少我希望如此:D
我建议您使用 jQuery 方法“.load()”的“完整”回调
$(document).ready(function(){
refreshTable();
});
function refreshTable(){
$('#table_list').load('table', function(){
setTimeout( refreshTable, 20000);
});
}
因此,将在执行查询处理和 HTML 插入后执行 setTimeout。 请注意,我们不再需要“updateTable”辅助函数,因为我们现在递归调用“refreshTable”函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.