我使用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秒钟保持选择相同的记录,从而产生相同记录的长列表。
答案 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>