EventSource的readyState一直为“0”

js代码是这样的:

<html>
<body>
<h1>获得服务器更新</h1>
<div id="result"></div>

<script>
if(typeof(EventSource)!=="undefined")
  {
    var source=new EventSource("stream");
    source.onmessage=function(event)
      {
        document.getElementById("result").innerHTML+=event + "<br />";
      };
    source.onerror = function (event) {
      console.log("error");
    };
  }
</script>

</body>
</html>

node代码是这样的:

var express=require("express");
var app=express();
var path=require("path");
var dirname=__dirname;
app.use(express.static(path.join(__dirname, './')));
app.get("/stream",function(req,res){
    res.writeHead(200, {
        "Content-Type":"text/event-stream"
    });
    setInterval(function(){
        res.write("hello");
    },1000);
});
app.listen(3031);

然后我隔一秒返回的“hello”并没有写到前台,但是network里面的确是每秒有数据返回的

clipboard.png
最后我发现source.onmessage函数是需要source.readyState为1的,但是我搞不懂它一直为什么是0.

clipboard.png

阅读 5.3k
1 个回答

数据传输的格式不对。

//SSE传输数据的固定格式:“data:”+要传输的数据+"\n\n"
res.write("data:"+"hello"+"\n\n");
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题