如何避免每10秒选择一次相同的记录

时间:2015-06-09 19:15:01

标签: php jquery mysql ajax

我使用10秒setInterval制作AJAX请求。 AJAX请求正在调用一个PHP文件,该文件从数据库中选择记录并将其显示为对用户的通知。我的问题实际上是如何避免在10s间隔显示相同的记录。

<script type="text/javascript">
    setInterval(function(){
        $.ajax({
            type: "GET",
            url: "getlinks.php",
            success: function(data){ 
                $("ul#notifications").append(data);
            }
        });
    }, 10000);//time in milliseconds 
</script>

我的Getlinks.php文件

<?php
    $getNote = $db_con->prepare("select link FROM note WHERE user_id = ".$_SESSION['user']. "and now_id = 0");
    $getNote->execute();
    $rowNote = $getNote->fetch();
    echo '<li>'.$rowNote['link'].'</li>';
?>

我的问题是AJAX每10秒钟保持选择相同的记录,从而产生相同记录的长列表。

3 个答案:

答案 0 :(得分:0)

据我所知,你需要添加一个&#34;显示&#34;字段和&#34;读&#34;数据库中的字段。 调用ajax时更新显示的字段,当用户真正打开注释时更新读取字段。 我会对字段使用tinyint(1 = true,0 = false)。

所以你的sql语法为popup&#34; new note&#34;需要select link FROM note WHERE user_id = ".$_SESSION['user']. " AND now_id = 0 AND displayed=0

我希望我理解你的问题。

答案 1 :(得分:0)

我在API中所做的与此类似的事情是包含'since'参数。

所以,你的jquery GET函数最终看起来像这样。

$.get('getlinks.php', {since: last_id}, function() { //do stuff here });

然后你的PHP脚本最终看起来像这样。

<?php
    $last_id = (isset($_REQUEST['since']) ? $_REQUEST['since'] : false);
    $sql = "select link FROM note WHERE user_id = ".$_SESSION['user']. "and now_id = 0" . ($last_id ? " AND id > $last_id;");
    $getNote = $db_con->prepare($sql);
    $getNote->execute();
    $rowNote = $getNote->fetch();
    echo '<li>'.$rowNote['link'].'</li>';
 ?>

答案 2 :(得分:0)

您可以通过对JS的小修改来解决此问题。

<script type="text/javascript">

 var old_data = '';

 setInterval(function(){
  $.ajax({
  type: "GET",
   url: "getlinks.php",
  success: function(data){ 
  if(data != old_data){
  $("ul#notifications").append(data);
  old_data = data;
  }

  }
 });
 }, 10000);//time in milliseconds 
</script>