EventSource的onmessage不执行

rockets311 2013-08-21 10:37:32
看w3cschool的HTML5教程--HTML 5 服务器发送事件
试着写了一下:
<!DOCTYPE html>
<html>
<body>
<header>
</header>
<h1>获得服务器更新</h1>
<div id="result"></div>
<script>
if(typeof(EventSource) == "function")
{
var source=new EventSource("http://localhost:8080/HelloWorld/EventSource.jsp");
source.onmessage = function(event)
{
//这个方法没进来
//alert(100);
document.getElementById("result").innerHTML += event.data + "<br />";
};
}
else
{
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>
</body>
</html>

服务端--EventSource.jsp:
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.DateFormat"%>
<%@ page contentType="text/event-stream; charset=UTF-8"%>
<%
response.setHeader("pragma","no-cache");
response.setHeader("expires","0");
response.setHeader("Cache-Control", "no-cache");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = df.format(new Date());
System.out.println("data: " + str);
out.print("data: " + str);
out.flush();
%>

可以看到,服务端在不断打印东西,但是客户端的source.onmessage方法就是没进去。搜了一下其他相关的解释:发现只是有个浏览器的开发者工具中客户端不断发起请求的截图。
例如:http://www.ibm.com/developerworks/cn/web/1301_jiangjj_html5message/难道那个方法是不会进去的?求高人指点,不胜感激!
...全文
3000 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Silence-boby 2015-12-21
  • 打赏
  • 举报
回复
为什么我加了两个换行符也收不到消息呢
七界之主 2015-08-19
  • 打赏
  • 举报
回复
在Server-sent Events规范中,服务器的响应类型是 text/event-stream,而响应的内容可以看成一个事件流,由不同的事件组成,每个事件由类型和数据组成,同时每个事件可以有一个可选的标识符。不同的事件之间通过空行分隔。 响应示例:

data: first event

data: second event
id: 100

event: myevent
data: third event
id: 101

: this is a comment
data: fourth event

所以每个事件后面要有一个空行表示该事件的结束。
robinLi0913 2015-05-27
  • 打赏
  • 举报
回复
问题解决了吗?我也是遇到了这个问题?求解
请叫我凯哥 2014-10-14
  • 打赏
  • 举报
回复
真吭!真吭!真吭!
丧失物语 2014-08-19
  • 打赏
  • 举报
回复
楼主实在太叼。真的是这样。。。坑爹啊
勿忘心安Billy 2014-08-09
  • 打赏
  • 举报
回复
你应该把onopen、onerror、onmessage都写全。这样就不会报错了!
gaojianqiu1 2014-04-21
  • 打赏
  • 举报
回复
感谢楼主,问题解决。
x5472 2013-08-27
  • 打赏
  • 举报
回复
引用 5 楼 x5472 的回复:
[quote=引用 3 楼 duxingzhe0311 的回复:] [quote=引用 2 楼 x5472 的回复:] 同问 一直在 get 但是没出发source.onmessage 希望牛人解答
经过测试,服务端代码改一下就OK了。多加了两个换行,经测试加一个换行是不行的。
out.println("data: " + str);
out.println();
[/quote] 3楼的方法 果然有效 怒顶一记 非常感谢!!! 不知道这是什么原理?为什么网上的示例中都没有呢.... [/quote] 原来如此,我也是刚学习这个,没注意到这些,总之,Thank you!!
rockets311 2013-08-27
  • 打赏
  • 举报
回复
引用 4 楼 x5472 的回复:
楼上方法 果然有效 怒顶一记 非常感谢!!! 不知道这是什么原理?为什么网上的示例中都没有呢....
原理猜一下,应该很easy吧!它读的时候是一行一行的读,所以要有换行符了,可能它规定最后一条消息之后也要有个换行符吧!so... 我发帖时候那个链接,其实示例中也是有两个换行符的,只是帖子上并没有强调这些东西,第一次做的时候也没注意,so...
x5472 2013-08-27
  • 打赏
  • 举报
回复
引用 3 楼 duxingzhe0311 的回复:
[quote=引用 2 楼 x5472 的回复:] 同问 一直在 get 但是没出发source.onmessage 希望牛人解答
经过测试,服务端代码改一下就OK了。多加了两个换行,经测试加一个换行是不行的。
out.println("data: " + str);
out.println();
[/quote] 3楼的方法 果然有效 怒顶一记 非常感谢!!! 不知道这是什么原理?为什么网上的示例中都没有呢....
x5472 2013-08-27
  • 打赏
  • 举报
回复
楼上方法 果然有效 怒顶一记 非常感谢!!! 不知道这是什么原理?为什么网上的示例中都没有呢....
rockets311 2013-08-27
  • 打赏
  • 举报
回复
引用 2 楼 x5472 的回复:
同问 一直在 get 但是没出发source.onmessage 希望牛人解答
经过测试,服务端代码改一下就OK了。多加了两个换行,经测试加一个换行是不行的。
out.println("data: " + str);
out.println();
x5472 2013-08-26
  • 打赏
  • 举报
回复
同问 一直在 get 但是没出发source.onmessage 希望牛人解答
街头小贩 2013-08-21
  • 打赏
  • 举报
回复
这个地址http://www.ibm.com/developerworks/cn/web/1301_jiangjj_html5message/下面不是有源码下载吗。下载下来跑一跑

39,087

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧