繁体   English   中英

SSE:'onmessage' 永远不会被调用

[英]SSE: 'onmessage' never gets called

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

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

但是我的message处理程序永远不会被调用。 onopenonerror处理程序确实被调用,Chrome 开发者工具确实显示了服务器发送的事件的一个很好的“流”视图,如果我从curl执行相同的调用,我会得到一个以正确方式很好地格式化的事件流。 可能有什么问题?

刚刚从本教程中意识到,您可以将事件名称与每个服务器发送的事件相关联。

当您这样做时, message侦听器将停止被调用,而您必须为您发送的每种事件设置一个新的特殊侦听器。 我是在我的服务器上这样做的。

因此,我必须做es.addEventListener("special-event-name", function () {...})而不是es.onmessage = function () {...}

这是一个最小示例,显示如何在同一 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM