SSE:'onmessage' 从未被调用
SSE: 'onmessage' never gets called
我正在学习互联网上最简单的教程,了解如何从 Javascript:
收听服务器发送的事件
var es = new EventSource('url')
es.onmessage = function (e) { console.log(e.data) }
但是我的 message
处理程序从未被调用过。 onopen
和 onerror
处理程序确实被调用,Chrome 开发人员工具确实显示了一个很好的 "stream" 服务器发送的事件视图,如果我从 curl
我得到了一系列以正确方式很好地格式化的事件。有什么问题吗?
刚刚从 this tutorial 了解到,您可以将事件名称与每个服务器发送的事件相关联。
当您这样做时,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>
我正在学习互联网上最简单的教程,了解如何从 Javascript:
收听服务器发送的事件var es = new EventSource('url')
es.onmessage = function (e) { console.log(e.data) }
但是我的 message
处理程序从未被调用过。 onopen
和 onerror
处理程序确实被调用,Chrome 开发人员工具确实显示了一个很好的 "stream" 服务器发送的事件视图,如果我从 curl
我得到了一系列以正确方式很好地格式化的事件。有什么问题吗?
刚刚从 this tutorial 了解到,您可以将事件名称与每个服务器发送的事件相关联。
当您这样做时,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>