24

我将 SSE 与内置的 JavaScript 逻辑 EventStream 一起使用。在onopen返回成功结果时,onmessage回调不起作用。奇怪的是,在 Chrome 中的EventStream选项卡中,数据结果按我的预期列出。

这是我的 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");
    };

  });

在此处输入图像描述

如您所见,有数据正在发出,但从onmessage未被触发。有人可以向我解释这种行为吗?

编辑onopenonerror做这两个工作。

4

1 回答 1

36

根据屏幕截图,您的事件流包含类型的事件"foo",而不是"message"。这只是默认类型(event事件流中没有字段)。从规格

  1. 将事件的类型属性初始化为message, […]

  2. 如果事件类型缓冲区的值不是空字符串,则将新创建的事件的类型更改为等于事件类型缓冲区的值。

在这里,您应该将侦听器设置为侦听"foo"事件:

eventSource.addEventListener("foo", function() {...})
于 2017-11-04T11:48:54.740 回答