2015-10-06 98 views
2

我有一项任务,为用户提供在我们的应用程序中运行的后端进程的状态。要显示此状态,我们在列出已完成任务的数据库中创建一个状态表,失败,或者都在进步,像这样:通过AJAX刷新表格

enter image description here

为了得到这个表的最新状态,我通过在setInterval()方法中包装呼叫,每3秒调用一次.ajax()方法。刷新工作如预期,并抓住了该计划的最新状态,但这是我在这个问题上的第一个方法,并感觉有点蛮力。我想知道是否有更好的方法来实现这个目标(例如,一个跨浏览器的解决方案,通过它自己的API模拟实时新闻提要)。有什么想法吗?

+1

这篇文章解释了一个更好的方法比我所能解释http://techoctave.com/c7/posts/60-simple-long- polling-example-with-javascript-and-jquery/ – NullHappens

+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(); 
?> 

你需要添加“数据:”在开始的显示给SSE知道这是您的数据和“\ n \ n“数据的结尾。

,并添加重试,所以都刷新10000 = 10秒

+0

这将是一个很好的解决方案,如果它支持IE –

+1

嗨,欢迎来到堆栈溢出。当你回答时,请在你的回答中包含一个好的解释。仅仅发布链接是不够的,因为链接可能不再存在一天。 –

+0

今天没人用IE了。 –