2014-01-20 151 views
0

我似乎無法找到任何服務器發送事件的好例子。服務器用PHP發送事件

我的目標是發送2條消息到2個獨立的divs,但我是新的JavaScript,所以我不知道如何解析這兩個消息,任何人都可以指向正確的方向嗎?

如果有人能解釋我如何SSE的工作,我可以運行這個PHP腳本send.php推動更新到網頁或JavaScript運行腳本本身?

這是我的PHP代碼:

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

$message = $row['message']; 
$user = $row['user']; 
echo "{$message}\n\n"; 
echo "{$user}\n\n"; 
flush(); 
?> 

這是我的HTML/JavaScript的:

<div id="result"></div> 

<script> 
if(typeof(EventSource)!=="undefined") 
{ 
var source=new EventSource("send.php"); 
source.onmessage=function(event) 
{ 
document.getElementById("result").innerHTML+=event.data + "<br>"; 
}; 
} 
else 
{ 
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events..."; 
} 
</script> 

回答

1

你可以只發送事件回服務器作爲一個JSON編碼字符串,並指明div應該得到什麼消息。

$arr = array(
    'user' => $row['user'], 
    'message' => $row['message'] 
) 
echo json_encode($arr); 

然後,解析來自服務器的JSON響應並針對它執行邏輯。讓我們假設兩個div有user ID和message

source.onmessage=function(event){ 
    var $data = JSON.parse(event.data); 
    for(key in obj){ 
     if (obj.hasOwnProperty(key)) { //ensure that we're not up in the prototype chain 
      document.getElementById(key).innerHTML = $data[key];  
     } 
    } 
} 

這裏的關係當然是key將是要麼usermessage。我們也希望有2個div,id="user"id="message",我們可以修改innerHTML。這不是要求,但有助於簡化流程。

+0

因此,這應該不刷新瀏覽器,我可以從服務器(PHP中的管理面板)運行這個推送消息到已打開的瀏覽器? – user2813059

+0

無論該腳本中的數據是否存在,都將動態創建,如果以這種方式構建的話。 – Ohgodwhy

+0

我要把這個標記爲解決方案,因爲它似乎有我需要的一切。但是,你能告訴我怎麼應該如何使用$ row ['message']和$ row ['user']來更新

,如果這對你沒有太大的問題。請 – user2813059