2017-10-27 81 views
9

Używam SSE z wbudowaną logiką EventStream dla javascript. Mimo, że onopen zwraca poprawny wynik, wywołanie zwrotne onmessage nie działa. Dziwne jest to, że w Chrome na karcie EventStream wyniki danych są wyświetlane zgodnie z oczekiwaniami.Zdarzenie wysłane przez serwer EventStream nie wyzwala "komunikatu", ale Chrome Debug wyświetla dane w zakładce "EventStream".

To jest moje JS snippet dla EventSource

var eventSource; 
    $(function() { 
    eventSource = new EventSource('get/status/'); 

    eventSource.onopen = function() { 
     console.log("Sse connection opened"); 
    }; 

    eventSource.onerror = function() { 
     console.log("error occured"); 
    }; 

    eventSource.onmessage = function (event) { 
     console.log("received"); 
    }; 

    }); 

enter image description here

Jak widać istnieją dane emitowane ale onmessage nie jest wyzwalany. Czy ktoś może mi wyjaśnić to zachowanie?

EDIT: onopen i onerror wykonują obie prace.

Odpowiedz

8

Zgodnie ze zrzutem ekranu strumień zdarzeń zawiera zdarzenia typu "foo", a nie "message". Jest to tylko typ domyślny (brak pola event w strumieniu zdarzeń). Od the spec:

  1. atrybut typ zainicjować wydarzenia do message, [...]

  2. Jeśli bufor typu zdarzenie ma wartość inną niż pusty ciąg, zmian typ nowo utworzonego zdarzenia, aby uzyskać wartość równą wartości bufora typu zdarzenia .

Tutaj należy ustawić słuchacza do nasłuchiwania "foo" zdarzeń:

eventSource.addEventListener("foo", function() {...})