Ajax,使用num_rows更新div

时间:2014-07-15 22:16:19

标签: php ajax json polling mysql-num-rows

我已经建立了一个通知系统,它几乎正常工作。我只有一个难以捉摸的位,我似乎无法理解。 当来自朋友的新更新进入时,它会按预期打印出新通知的数量,仅当用户发布两次num_rows 2弹出时...但如果用户再次发布则更新并将2个新通知编号替换回1在div中,因为我在ajax中使用html来替换。 所以我的问题是,如何更新div以获得结果总量,因此它变为1,2,3,4等而不是2,1,1,1,1。 我不想仅使用div中的(1)更新来替换新行的数量,只需添加其中已有的新更新量。

有点像facebook显示通知量。说我在我的墙上有两个和一个朋友的帖子然后我会有3 ..但是此刻它添加了最后一个新的num行并返回到1.

AJAX

<script type="text/javascript">
function loadIt() {
  var notification_id="<?php echo $notification_id['notification_id'] ;?>"
  var notification_id= window.localStorage.getItem ('lastId'); 
$.ajax({
type: "GET",
url: "viewajax.php?notification_id="+notification_id,   
dataType:"json",
cache: false,
 success: function(response){
 if(response){
    dataHandler;
    if(response.num){
       window.localStorage.setItem('lastId', response.notification_id);

  var dataHandler = function(response){
   var isDuplicate = false, storedData = window.localStorage.getItem ('lastId');

   for (var i = 0; i < storedData.length; i++) {
     if(storedData[i].indexOf(response) > -1){
        isDuplicate = true;
     }
   }
   if(!isDuplicate){
     storedData.push(response);
   }
}; 
if(response){
   if(response.num){
      $("#notif_actual_text-"+notification_id).prepend('<div  id="notif_actual_text-'+response['notification_id']+'" class="notif_actual_text"><a href="'+response['notification_id']+'">'+response['notification_content']+' </a><br />'+response['notification_time']+'</div></nr>');

      $("#mes").html(''+ response.num + '');
    }
};     
}
}   
}
});
}
setInterval(loadIt, 10000);

PHP

$json = array();
$com=mysqli_query($mysqli,"select notification_id,notification_content,notification_time from notifications where notification_id > '$id' AND notification_status=1 ");
echo mysqli_error($mysqli);

$num = mysqli_num_rows($com);
if($num!=1){

    $json['num'] = $num;
}else{
    $json['num'] = 0;
}
$resultArr = mysqli_fetch_array($com);
$json['notification_id'] = $resultArr['notification_id'];
$json['notification_content'] = $resultArr['notification_content'];

mysqli_free_result($com);
header('Content-Type: application/json');
echo json_encode($json);

}

1 个答案:

答案 0 :(得分:1)

客户端的通知数量为storedData.length。

所以我会替换计数器

$("#mes").html(''+ response.num + '');

$("#mes").html(storedData.length);