2012-11-03 10 views
10

cerco di usare oggetto EventSource con un piccolo esempioNon riesco a vedere l'evento HTML5 EventSource con metodo onMessage in Chrome

lato client, ho questa pagina con script:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <title>Welcome!</title> 
    </head> 
    <body> 
     <div id="result"></div> 
     <script type="text/javascript"> 
     var sse = new EventSource('event-source.php'); 

     sse.onmessage = function(event) { 
      console.log(event.data); 
      document.getElementById("result").innerHTML+=event.data + "<br>"; 
     } 

     sse.onerror = function(event) { 
     console.log(event); 
     } 

     </script> 
    </body> 
</html> 

script chiama evento-source .php sul server. Qui è l'evento-source.php:

<?php 
header('Content-type: text/event-stream'); 
echo 'data: '.time().PHP_EOL; 

Quando provo questa configurazione su Firefox, il metodo "onMessage" è ben definito, ma non con Chrome. Quando metto il metodo "onerror", sembra che sia chiamato ma non riesco a vedere la causa dell'errore.

Cosa devo fare?

+0

provato in cromo versione 22, ha funzionato. – igorw

+0

Non sul mio sistema, corro su Ubuntu 12.04, ho provato con Ubuntu 12.04, Chromium 20 e Chrome 22. Inoltre, onmessage et onerror sono chiamati sia su Firefox, ma i dati degli eventi sono visualizzati correttamente ... – mika34

+0

funziona bene su Chrome 32.0.1700.102 m – Kamil

risposta

0

In onmessage si chiama proprietà oggetto desiderato, perché non si fa lo stesso in onerror?
Penso che il vostro onerror dovrebbe assomigliare a questo:

sse.onerror = function(event) { 
     console.log(event.message); 
    } 

Spiegazione:https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events - questo link dice "Se qualcosa non va (...), un evento errore viene generato."

Quindi, quando la gestione personalizzata degli errori dovresti conoscere la struttura ErrorEvent :) Funziona così:

  1. ErroreEvent. messaggio (Sola lettura) È una DOMString contenente un messaggio di errore leggibile dall'uomo che descrive il problema.
  2. ErrorEvent. nome file (Sola lettura) È una DOMString contenente il nome del file di script in cui si è verificato l'errore.
  3. ErrorEvent. lineno (sola lettura) È un numero intero contenente la riga numero del file di script su cui si è verificato l'errore.
  4. ErrorEvent. colonna (sola lettura) È un numero intero contenente la colonna numero del file di script su cui si è verificato l'errore.
  5. ErrorEvent. errore (Sola lettura) È un oggetto JavaScript che è interessato dall'evento.

Maggiori informazioni e fonte: https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent

+0

Si prega di commentare quando si downlota, tutti stanno imparando, sempre .... :) –

0

CLIENTE

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

SERVER

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

    $time = date('r'); 
    echo "data: The server time is: {$time}\n\n"; 
    flush(); 
    ?> 
Problemi correlati