web-dev-qa-db-ja.com

サーバー送信イベントEventStreamは「onmessage」をトリガーしませんが、Chromeデバッグは「EventStream」タブにデータを表示します

私はSSEを使用しており、JavaScript用のロジックが組み込まれたEventStreamを使用しています。onopenが成功した結果を返す一方で、onmessageコールバックが機能していません。 ChromeEventStreamタブ内)では、データの結果が期待どおりに一覧表示されます。

これはEventSourceのJSスニペットです

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

ご覧のとおり、データが送信されていますが、onmessageがトリガーされることはありません。誰かが私にこの行動を説明できますか?

[〜#〜] edit [〜#〜]onopenonerrorは両方とも機能します。

18
xetra11

スクリーンショットによると、イベントストリームには、"foo"ではなく"message"タイプのイベントが含まれています。これはデフォルトのタイプのみです(イベントストリームにeventフィールドがありません)。から 仕様

  1. イベントのtype属性をmessage、[…]に初期化します

  2. イベントタイプバッファの値が空の文字列以外の場合は、新しく作成されたイベントのタイプをイベントタイプバッファの値と等しくなるように変更します。

ここでは、"foo"イベントをリッスンするようにリスナーを設定する必要があります。

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