HTML5 SSE从数据库获取更新记录

时间:2012-03-27 13:22:10

标签: html5

这是我的第一个问题,所以如果构造不正确,我会提前道歉。

我必须从数据库中获取更新记录并显示给用户。我的第一个想法是使用AJAX,但经过大量研究(包括SO)我决定使用HTML5 SSE(Eventsource)。

我检查了很多教程和提示,并获得了正常工作的代码,所以我的问题是:

这是最好的方法吗?我做错了吗?我愿意接受建议。

以下是代码:

来自HTML / View文件的Javascript(使用codeigniter btw):

var source = new EventSource('site/update');

var lastId = '';

source.onmessage = function (event) {
    if(event.data != lastId){
        var json_object = eval( '(' + event.data + ')'); 
        var list = '';                                       
        $.each(json_object, function() {
            list = list + this.name + ' - ' + this.phone;
        });
        $('#client').html(list);
        lastId = event.data;
    } 
};                                        

var lastId = ''; source.onmessage = function (event) { if(event.data != lastId){ var json_object = eval( '(' + event.data + ')'); var list = ''; $.each(json_object, function() { list = list + this.name + ' - ' + this.phone; }); $('#client').html(list); lastId = event.data; } };

正如您所看到的,我创建了一个IF,因此它不会更新,除非它是一个新内容。理想情况下,一旦有了新内容,SSE就会返回,但我使用了一个警报功能进行测试,并且它一遍又一遍地获得相同的内容,所以我添加了IF。 PS。我有一个列表来显示DIV中的记录,但我无法发布它,因为它一直给我格式错误,所以我从帖子中删除它。

这是控制器代码:

public function update() 
{
    $this->load->model('site_model');  
    $clients = $this->site_model->get_all('');  
    header("Content-Type: text/event-stream\n\n");  
    echo "data: " . json_encode($clients);  
}

控制器非常简单,它调用的模型函数只查询符合我想要的标准的所有DB记录。我不会发布模型,因为它只是一个查询。

这就是它。我期待着听到你的意见。

感谢。

1 个答案:

答案 0 :(得分:0)

什么是 SSE?

  • 服务器发送事件是指网页自动从服务器获取更新。

~ 以前也可以,但是网页会询问是否有更新。通过服务器发送的事件,更新会自动进行。

示例:Facebook/Twitter 更新、股票价格更新、新闻提要、体育赛事结果等。

如何从数据库中检索记录:

var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
  document.getElementById("result").innerHTML += event.data + "<br>";
};