这是我的第一个问题,所以如果构造不正确,我会提前道歉。
我必须从数据库中获取更新记录并显示给用户。我的第一个想法是使用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记录。我不会发布模型,因为它只是一个查询。
这就是它。我期待着听到你的意见。
感谢。
答案 0 :(得分:0)
什么是 SSE?
~ 以前也可以,但是网页会询问是否有更新。通过服务器发送的事件,更新会自动进行。
示例:Facebook/Twitter 更新、股票价格更新、新闻提要、体育赛事结果等。
如何从数据库中检索记录:
var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
};