2016-11-08 97 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输出。