2015-10-06 136 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了。 –