2016-11-08 104 views
0

我在第一次嘗試在項目中使用server sent events,我對此很興奮。因爲我終於可以告別AJAX了。 (我喜歡AJAX,但不喜歡我現在正在做的事情)。任何方式,我試圖使用服務器發送的事件來檢查我的服務器(PHP腳本)的ping,如果發生ping,顯示一個簡單的警報('你好世界');在我的頁面。Javascript:在PHP中使用服務器發送的事件?

但是,我不知道爲什麼我從來沒有在我的網頁上得到任何東西..沒有錯誤要麼表明出了問題。

這是我的JavaScript服務器發送代碼:

var pin =localStorage.getItem("pin"); 

var evtSource = new EventSource("https://example.com/check-for-orders.php?pin="+pin+"");  
evtSource.addEventListener("ping", function(e) { 

     var data = JSON.parse(e.data); 

     alert(data); 
     alert('Hello World'); 

}, false); 

,這是我的PHP代碼:

<?php 
header("Access-Control-Allow-Origin: *"); 
header("Content-Type: text/event-stream"); 
header("Cache-Control: no-cache"); 
//header("Connection: keep-alive"); 

session_start(); 
//Don't forget to enable mod_headers module in httpd.conf. 
include "../config/connect.php"; 
// This block grabs the whole list for viewing 

$pin = $_GET['pin']; 

$pin2 = $pin.', '; 

$sql = "SELECT * FROM orders WHERE something=0 LIMIT 1"; 
$query = mysqli_query($db_conx, $sql); 
$productCount2 = mysqli_num_rows($query); 
if ($productCount2 > 0) { 
    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ 
     $id2 = $row["id"]; 
    $full_address = $row["full_address"]; 
     $drop_address = $row["drop_address"]; 
     $uPhone = $row["uPhone"]; 
     $ulat = $row["ulat"]; 
     $ulng = $row["ulng"]; 
     $ORDER_ID = $row["order_id"]; 


echo "event: ping\n"; 

echo "".$ORDER_ID." - Pick Up Location: ". $full_address .""; 
echo "<br /><br />"; 
echo "Drop Location: ".$drop_address.", Phone: ".$uPhone.""; 
    } 
} else { 

} 
mysqli_close($db_conx); 
?> 

可能有人請告知這個問題?

任何幫助,將不勝感激。

+0

將消息放入代碼的其他部分,然後嘗試。 –

+0

@DhirenVasoya,抱歉,我沒有明白你的意思!什麼信息? – Jackson

+0

在上面的代碼中,有一部分目前是空白的,就像這樣。 else {echo「有一些錯誤」; } –

回答

0

你需要把你的代碼放在try ..... catch塊中,所以如果任何錯誤是occuers它顯示在那裏。

try 
{ 
    header("Access-Control-Allow-Origin: *"); 
    header("Content-Type: text/event-stream"); 
    header("Cache-Control: no-cache"); 

    session_start(); 
    include "../config/connect.php"; 

    $pin = $_GET['pin']; 
    $pin2 = $pin.', '; 

    $sql = "SELECT * FROM orders WHERE something=0 LIMIT 1"; 
    $query = mysqli_query($db_conx, $sql); 
    $productCount2 = mysqli_num_rows($query); 
    if ($productCount2 > 0) 
    { 
     while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) 
     { 
     $id2 = $row["id"]; 
     $full_address = $row["full_address"]; 
     $drop_address = $row["drop_address"]; 
     $uPhone = $row["uPhone"]; 
     $ulat = $row["ulat"]; 
     $ulng = $row["ulng"]; 
     $ORDER_ID = $row["order_id"]; 
     echo "event: ping\n"; 
     echo "".$ORDER_ID." - Pick Up Location: ". $full_address .""; 
     echo "<br /><br />"; 
     echo "Drop Location: ".$drop_address.", Phone: ".$uPhone.""; 
    } 
    } 
    else { 

    } 
    mysqli_close($db_conx); 
} 
catch (Exception $e) 
{ 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 
+0

正如我在評論中提到的,使用try {},catch {},或者else {}中的消息不能解決我的問題。 – Jackson

0

我認爲你需要刷新你的回聲,並保持輸出格式的規範之內。把數組中的數據和使用發送

function sendSSEMessage($id, $data){ 
    echo "id: $id" . PHP_EOL; 
    echo 'data:'.json_encode($data). PHP_EOL; 
    echo PHP_EOL; 
    ob_flush(); 
    flush(); 
} 

要調試的PHP,你可以把它在CLI或直接在瀏覽器一樣,可惜不像AJAX SSE似乎並沒有傳遞比其他弦格式化的。所以你不能在控制檯中看到你的php輸出。