检测SSE中readyState的变化

5
我正在使用HTML5服务器发送事件:
SSEUpdate = new EventSource("update.php");

我希望能够检测到 SSEUpdate.readyState 发生变化。我尝试使用 .onerror,但是当我使用 console.log(SSEUpdate.readyState) 时,总是得到 0。 我希望在 readyState 变为 2 时运行我的函数。


实际上规范中确实有 readyState,但我找不到 onreadystatechange,所以它似乎仍然不像 ajax 那样工作,相反你可以在 onerroronmessage 处理程序内部检查 event.targetreadyState 属性,但通常你真的不需要知道这个。你为什么需要知道这个呢? - adeneo
我猜你总是得到0,因为你没有连接到任何东西,请设置一个Web服务器并确保update.php发送正确的信息。https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events - Brunis
回应adeneo的评论:你为什么想知道呢?SSE被设计成自动重新连接。如果你关心自动重新连接不会发生的情况,那么你可能想要做好工作并实现适当的保持活动消息。 (?) - Darren Cook
1
SSE在计算机从睡眠状态恢复时并不总是自动重新连接。我还不确定是否需要它。 - GiantDuck
1个回答

2

我最终采用了轮询解决方案:

var SSECheck = setInterval(function() {
    if (SSEUpdate.readyState == 2) {
        clearInterval(SSECheck);
        // call to fn to restart sse
    }
}, 500);

拍摄需要0.5秒,但功能正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接