这是我的服务器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中工作正常,歌剧但不在Google Chrome中工作我用18.x和20.x进行了检查
它将进入我使用print语句检查的服务器页面,但它没有到达“document.getElementById(”result“)行.innerHTML = event.data;”
...谢谢
答案 0 :(得分:1)
对于您正在调用未定义的函数begin()
,虽然这不应该是问题。
Chrome开发控制台是否显示任何错误?它应该显示至少一个。因为开始功能。网络选项卡是否显示Server_Date.jsp的流量?
答案 1 :(得分:1)
我曾经遇到过同样的问题。作为服务器部分,我使用PHP,但我猜它的工作方式相同。为我修复的是添加ob_flush()
。现在,我不知道你的语言应该是什么,但也许它可以帮助你朝着正确的方向发展。
答案 2 :(得分:1)
我遇到了同样的问题,我通过在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();
答案 3 :(得分:1)
问题解决了
解决方案:
页面编码问题:客户端使用UTF-8编码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
服务器端没有提到UTF-8,所以在setContentType中添加charset = UTF-8之后它的工作
response.setContentType("text/event-stream;charset=UTF-8");
感谢人们努力回答我的问题