我正在尝试为基于Web的系统实现一个简单的通知系统。我已经读过websocket,ratchet,socket.io等等。但问题是,我没有足够的时间来实现这些,所以我决定用长时间的民意调查来解决。但是,我不确定我是否真的做得对,或者我只是在上传系统后发送垃圾邮件。我还阅读了有关长轮询的几个主题,但我不太确定它们与我目前使用的有何不同。所以我的担忧是:
1.任何人都可以告诉我,我是否正在进行长时间的投票?
的 2。如果不是,我应该用我的代码更改什么?
HTML:
<li class="dropdown notifications-menu" id="notif-div">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i><?php if (!empty($notif_count)): ?><span class="label label-warning" id="notif-count"><?php echo $notif_count->notif_count?></span>
<?php endif; ?>
</a>
<ul class="dropdown-menu">
<li>
<ul class="menu">
<?php foreach ($notifications as $key => $notification): ?>
<?php if ($notification->type_of_notification == 'Comment'): ?>
<li>
<a href="<?php echo $notification->href ?>">
<i class="ion-chatbubble"></i> <?php echo $notification->title_content ?>
</a>
</li>
<?php elseif ($notification->type_of_notification == 'Reply'):?>
<li>
<a href="<?php echo $notification->href ?>">
<i class="ion-chatbubbles"></i> <?php echo $notification->title_content ?>
</a>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
</li>
</ul>
</li>
JS:
(function() {
var notif = function(){
var user_id = {
user_id: "<?php echo $traveller_details->user_id ?>"
};
$.ajax({
url: "/Home/get_notif",
type: "POST",
data: user_id,
success: function (data){
$('#notif-div').html(data);
}
});
};
setInterval(function(){
notif();
}, 60000);
})();
PHP:
public function get_notif()
{
$this->data['notif__count'] = $this->Homes->get_notif_count($this->input->post('user_id'));
$this->data['notifications'] = $this->Homes->get_notifications($this->input->post('user_id'));
echo '
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i>';
if (!empty($this->data['notif__count'])) {
echo '<span class="label label-warning" id="notif-count">'.$this->data['notif__count']->notif_count.'</span>';
}
echo '</a>';
echo '<ul class="dropdown-menu">
<li>
<ul class="menu">';
foreach ($this->data['notifications'] as $key => $notification) {
if ($notification->type_of_notification == 'Comment') {
echo '
<li>
<a href="'.$notification->href.'">
<i class="ion-chatbubble"></i> '.$notification->title_content.'
</a>
</li>
';
}elseif ($notification->type_of_notification == 'Reply') {
echo '
<li>
<a href="'.$notification->href.'">
<i class="ion-chatbubbles"></i> '.$notification->title_content.'
</a>
</li>
';
}
}
echo '
</ul>
</li>
</ul>
';
}
我对长时间的民意调查并不熟悉,所以我道歉了。顺便说一下,我正在使用Codeigniter框架。提前谢谢。
答案 0 :(得分:0)
你的代码看起来是正确的但是如果你真的想要使用这种方法,你仍然可以改进你的代码。
因此,首次加载页面时,您将收到该用户的所有新通知。现在在会话中存储通知的最后一个ID。即,如果最后插入的通知ID为200,例如,只需在会话中添加商店200。
当您对php函数进行ajax调用时,从会话中获取存储的通知ID,并在when条件中添加一个条件
->where("notification_id",">",$YOUR_ID);
因此,根据我的示例,您将在ID 200之后添加所有通知。现在,在发送此结果之前,请使用最新的通知ID更新会话值。
在您的AJAX功能中,您可以简单地将新数据附加到现有数据,而不是替换整个HTML。因此,而不是从数据库中获取所有行并替换HTML仅获取新添加的数据并追加。