即时通知

时间:2012-03-15 05:58:23

标签: php codeigniter caching browser-cache

我想知道和研究的是找出我如何拥有一个页面/功能或者每隔几秒钟没有加载什么或者不是那样我可以在CodeIgniter CMS中立即向我的用户报告通知他们在收件箱中有新的个人信息。

当用户点击信封时,当用户从登录屏幕进入仪表板时,它将显示最后5条消息,如果他们收到同步的pm消息,它将立即通过显示的小覆盖图通知他们如果红色圆圈已经存在,则会增加红色圆圈或将其添加为1。

2 个答案:

答案 0 :(得分:2)

在您的控制器中:

$this->load->library('javascript');

在您看来:

<script>
$(window).load(function checkMessages() {
$.ajax({
url: 'instant_messenger.php', 
success: function(data) {
$('messagebox').html(data);
}});
setTimeout('checkMessages', 5000);
});
</script>

...其中'instant_messenger.php'是检查新邮件的脚本,'messagebox'是您希望邮件显示的html元素。

这是一个基本示例,但此脚本将每5秒运行一次check_messages.php,并将输出放在用户页面上,而不必重新加载。

答案 1 :(得分:1)

我假设您的javascript已经加载,我假设您也使用了jquery。就这样。

我的建议与乍得有点类似。但从某种意义上说,如果你想因为某种原因独立地调用它,那么它就更可重复使用了。

var $messageCountJSON;
var messageTimer = '';
var messageInterval = 5;

//assumed JSON response is {"count":"20"} for example sake.

function messageCount(displayElementID)
{
    $.get('/url/to/script/', function(data)
    {
        $messageCountJSON = data; 
    }, 'json');
    if(displayElementID != null && displayElementID != undefined && displayElementID != '')
    {
        $('#'+displayElementID).html(data.count);
    }
}

$(document).ready(function()
{
    messageTimer = setInterval(function(){messageCount();}, messageInterval*1000);
});

//you can optionally kill the timed interval with something like
$('#element').click(function(){clearInterval(messageTimer);})

我当然只是随心所欲地将这个从我的屁股中拉出来,因为我没有100%经过测试,但值得一试。

值得一提的是,这不是即时通知。这是异步的;通知,这意味着在这种情况下,您每隔5秒就会向脚本发送一个get请求,并相应地从中获取数据。如果您想要即时通知,可以查看同步;脚本点和客户端之间传输的数据永远不会关闭。两者都有优势和缺点。异步更常用作2邪恶中的较小者。更多的是Synchronous没有合适的硬件来支持它而没有正确的设置,只会导致您的网站锁定并冻结用户浏览器。