2012-07-04 50 views
3

不工作这是我的服务器JSP代码“Server_Date.jsp”服务器发送的事件在谷歌浏览器

<% 
response.setHeader("cache-control", "no-cache"); 
response.setContentType("text/event-stream"); 
out.print("data: " + (new java.util.Date()).toString() + "x\n\n"); 
out.flush(); 
%> 

这是我的客户端的jsp页面“Client_Serverdate.jsp”

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
</head> 
<body onload="begin()"> 
<h1>Getting server updates</h1> 
<div id="result"></div> 
<script > 
if(typeof(EventSource)!=="undefined") 
{  
var source=new EventSource("Server_Date.jsp");  
source.addEventListener("message", function(event) { 
    document.getElementById("result").innerHTML = event.data; 
}, false); 
} 
else 
{ 
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events..."; 
} 
</script> 
</body> 
</html> 

请帮助我,这代码在Mozilla Firefox中正常工作,歌剧,但不工作在谷歌浏览器我用18.x和20.x检查也

这是去服务器页我用打印语句检查,但它不是COM到行“document.getElementById(”result“)。innerHTML = event.data;”

谢谢...

+0

可能是chrome会遇到新行('\ n')的问题,请勿尝试'\ n'。 –

+0

@RaviJain我也检查过\ n也。如果我alert()之前source.addEventListener()提示,但里面的功能,它不提示... plz帮我 –

回答

1

问题得到解决

解决方案:

页编码的问题:客户端侧使用UTF-8编码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

服务器侧UTF-8没有被提,所以在setContentType中添加字符集= UTF-8后,其工作

response.setContentType("text/event-stream;charset=UTF-8"); 

感谢您的努力回答我的问题

1

对于一个你调用尽管这不应该是这里的问题是没有定义的函数begin()

Chrome开发控制台是否显示任何错误?它应该显示至少一个。由于开始功能。网络选项卡是否显示到Server_Date.jsp的流量?

+0

Chrome开发控制台显示任何错误?不,在Chrome控制台中没有错误...它正在调用Server_Date.jsp,但该文件返回的数据不会打印在Client_Serverdate.jsp文件 –

+0

+1网络选项卡中。 – Sorter

1

我曾经有同样的问题。作为服务器部分,我使用了PHP,但我想它的工作原理是一样的。为我修复的是增加了ob_flush()。现在,我不知道你的语言应该是什么,但也许它可以帮助你朝着正确的方向发展。

+0

替代的ob_flush(),在jsp中只有out.flush(),但它不能与chrome一起工作,这就是我的问题......帮助我...... –

0

我遇到了同样的问题,我通过在servlet的末尾添加一个换行符来解决它。 这样的:

response.setContentType("text/event-stream;charset=UTF-8"); 
response.addHeader("Cache-Control", "no-cache"); 
PrintWriter out = response.getWriter(); 
out.println("data: " + new Date()); 
out.println(); 
out.flush(); 
out.close();