2012-11-03 18 views
10

próbuję użyć obiektu EventSource z odrobiną przykładnie widzę imprezę HTML5 EventSource metodą onmessage w Chrome

stronie klienta, mam tę stronę ze skryptu:

<!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> 

skrypt wywołuje zdarzenie-source .php na serwerze. Oto zdarzenia source.php:

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

Kiedy próbuję tę konfigurację na Firefox, metoda „onmessage” jest dobrze nazwie, ale nie z Chrome. Kiedy wstawiam metodę "onerror", wygląda na to, że jest wywoływana, ale nie widzę przyczyny błędu.

Co należy zrobić?

+0

Próbowaliśmy go w Chrome w wersji 22, to działało. – igorw

+0

Nie w moim systemie, uruchamiam Ubuntu 12.04, próbowałem z Ubuntu 12.04, Chromium 20 i Chrome 22. Ponadto, onmessage et onerror są nazywane zarówno na Firefox, ale dane Event są poprawnie wyświetlane ... – mika34

+0

działa dobrze na Chrome 32.0.1700.102 m – Kamil

Odpowiedz

0

Wzywasz pożądanej własności obiektu, dlaczego nie robisz tego samego w onerror?
myślę że onerror powinna wyglądać następująco:

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

Objaśnienie:https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events - ten link mówi "Kiedy pojawiają się problemy (...), zdarzenie błąd jest generowany."

Dlatego podczas niestandardowej obsługi błędów powinieneś poznać strukturę ErrorEvent :) Jest tak:

  1. ErrorEvent. wiadomość (Tylko do odczytu) Czy DOMString zawiera czytelny dla człowieka komunikat o błędzie opisujący problem.
  2. ErrorEvent. filename (Tylko do odczytu) Jest DOMString zawierający nazwę pliku skryptu, w którym wystąpił błąd.
  3. ErrorEvent. lineno (Tylko do odczytu) Jest liczbą całkowitą zawierającą numer wiersza skryptu, w którym wystąpił błąd.
  4. ErrorEvent. column (Tylko do odczytu) Jest liczbą całkowitą zawierającą numer kolumny pliku , w którym wystąpił błąd.
  5. ErrorEvent. error (Tylko do odczytu) Jest obiektem JavaScript o numerze , którego dotyczy zdarzenie.

Więcej informacji i źródło: https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent

+0

Proszę, skomentuj, kiedy się zgodzisz, wszyscy się uczą, zawsze .... :) –

0

KLIENT

<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> 

SERWER

<?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(); 
    ?> 
Powiązane problemy