服务器发送事件EventStream不会触发“onmessage”,但Chrome Debug会在“EventStream”选项卡中显示数据

时间:2017-10-27 09:13:37

标签: javascript google-chrome event-stream

我正在使用SSE和内置逻辑的EventStream for javascript。在onopen返回成功结果的同时,onmessage回调无效。 奇怪的是,在 EventStream 标签中的Chrome中,数据结果按照我的预期列出。

这是我的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。任何人都可以向我解释这种行为吗?

编辑onopenonerror都有效。

1 个答案:

答案 0 :(得分:16)

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

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

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

  4.   

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

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