我有一项任务是为用户提供在我们的应用程序中运行的后端进程的状态。为了显示这种状态,我们在数据库中创建了一个状态表,列出已完成,失败或正在进行的任务,如下所示:
要获取此表的最新状态,我通过在.ajax()
方法中包装调用,每隔3秒调用setInterval()
方法。刷新按预期工作并抓住程序的最新状态,但这是我在这个问题上的第一个方法,感觉有点暴力。我想知道是否存在更好的方法来实现这一点(即,使用它自己的API模拟实时新闻源的跨浏览器解决方案)。有什么想法吗?
答案 0 :(得分:1)
试试这个http://www.w3schools.com/html/html5_serversentevents.asp
sse是最好的方法。
试试此代码
<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
//display data in event array.
};
} else {
//Use your old interval if SSE not support in browser
}
</script>
在您的PHP代码中
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');//this is important
$arr=['status'=>1,'data'=>$some_array];
$retry="retry: 10000\n";
echo $.retry."data: ".json_encode($arr)."\n\n";
flush();
?>
你需要添加&#34;数据:&#34;在您开始向SSE显示时,知道这是您的数据和&#34; \ n \ n&#34;数据结束。
并添加重试,因此每刷新10000 = 10秒