我的论坛上有一个页面,当有新帖子时我试图自动更新,但它似乎只能间歇性地工作。
我有一种感觉,它可能是成功和等待的顺序,但不能为我的生活弄清楚,是否有人但更有知识,看看我哪里出错了?
由于
<script>
var timestamp = Math.round((new Date()).getTime() / 1000);
function myTimer() {
$.ajax({
url: 'loadtopic.php?id=<? echo $getid; ?>&time=' + timestamp,
success: function(data) {
$("#append").before(data);
setTimeout(myTimer,3000);
timestamp = Math.round((new Date()).getTime() / 1000);
}
});
}
myTimer();
</script>
答案 0 :(得分:0)
我该怎么做:
创建一个全局(或隐藏整个某处)变量
存储上次更新或加载页面的时间。 window.latest_update = new Date()
创建一个函数,根据该函数从服务器获取新帖子 当前时间戳。
在一个时间间隔内运行该功能,并仅请求发布以来的帖子
最新时间戳。可能在20到40秒之间 - 但优化
根据您的服务器负载。 var PollServer = setInterval(get_posts, 20000)
有一个单独的功能,您可以调用该功能将帖子加载到页面上。这将使您的代码保持模块化。
答案 1 :(得分:0)
尝试更改代码的顺序:
<script>
function myTimer() {
var timestamp = Math.round((new Date()).getTime() / 1000);
$.ajax({
url: 'loadtopic.php?id=<? echo $getid; ?>&time=' + timestamp,
success: function(data) {
$("#append").before(data);
setTimeout(myTimer,3000);
}
});
}
myTimer();
</script>
答案 2 :(得分:0)
如果请求因任何原因失败,则不会调用成功,因此循环将中断。 您可以使用setInterval来确保它被调用。
<script>
var timestamp = Math.round((new Date()).getTime() / 1000);
function myTimer() {
$.ajax({
url: 'loadtopic.php?id=<? echo $getid; ?>&time=' + timestamp,
success: function(data) {
$("#append").before(data);
timestamp = Math.round((new Date()).getTime() / 1000);
}
});
}
myTimer();
setInterval(myTimer,3000);
</script>
否则将setTimeout放入'complete'选项,即使请求失败也会执行代码。
<script>
var timestamp = Math.round((new Date()).getTime() / 1000);
function myTimer() {
$.ajax({
url: 'loadtopic.php?id=<? echo $getid; ?>&time=' + timestamp,
success: function(data) {
$("#append").before(data);
timestamp = Math.round((new Date()).getTime() / 1000);
},
complete: function() {
setTimeout(myTimer,3000);
}
});
}
myTimer();
</script>