SSE:“ onmessage”永远不会被调用

时间:2019-08-26 01:08:59

标签: javascript server-sent-events eventsource

我正在关注互联网上最简单的教程,该教程关于如何从Javascript监听服务器发送的事件:

var es = new EventSource('url')
es.onmessage = function (e) { console.log(e.data) }

但是我的message处理函数从未被调用。 onopenonerror处理程序确实被调用,Chrome开发者工具确实显示了服务器发送的事件的漂亮“流”视图,如果我从curl进行相同的调用,我会得到以正确的方式很好地格式化事件流。怎么了?

2 个答案:

答案 0 :(得分:1)

this tutorial开始,您就可以将事件名称与每个服务器发送的事件相关联。

执行此操作后,message侦听器将停止被调用,而必须为要发送的每种事件设置一个新的特殊侦听器。我是在服务器上做的。

所以我不得不做es.onmessage = function () {...}而不是es.addEventListener("special-event-name", function () {...})

答案 1 :(得分:0)

这是一个最小的示例,展示了如何在同一SSE流中获取默认message事件类型和自定义事件类型。

<html lang="en">
  <body>
    <div id="payload"></div>
    <script>

      const stream = new EventSource('https://url-goes-here');

      stream.addEventListener('message', (event) => {
        document.getElementById('payload').innerText = `Received a regular message: ${event.data}`;
      }, false);

      stream.addEventListener('myEvent', (event) => {
        document.getElementById('payload').innerText = `Received a myEvent message: ${event.data}`;
      }, false);

    </script>
  </body>
</html>