jQuery从页面自动加载

时间:2014-01-19 23:26:52

标签: jquery ajax

我的论坛上有一个页面,当有新帖子时我试图自动更新,但它似乎只能间歇性地工作。

我有一种感觉,它可能是成功和等待的顺序,但不能为我的生活弄清楚,是否有人但更有知识,看看我哪里出错了?

由于

<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>

3 个答案:

答案 0 :(得分:0)

我该怎么做:

  1. 创建一个全局(或隐藏整个某处)变量 存储上次更新或加载页面的时间。 window.latest_update = new Date()

  2. 创建一个函数,根据该函数从服务器获取新帖子 当前时间戳。

  3. 在一个时间间隔内运行该功能,并仅请求发布以来的帖子 最新时间戳。可能在20到40秒之间 - 但优化 根据您的服务器负载。 var PollServer = setInterval(get_posts, 20000)

  4. 有一个单独的功能,您可以调用该功能将帖子加载到页面上。这将使您的代码保持模块化。

答案 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>