【发布时间】:2012-10-23 22:44:36
【问题描述】:
我尝试通过一个小例子来使用EventSource 对象
在客户端,我的页面包含以下脚本:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Welcome!</title>
</head>
<body>
<div id="result"></div>
<script type="text/javascript">
var sse = new EventSource('event-source.php');
sse.onmessage = function(event) {
console.log(event.data);
document.getElementById("result").innerHTML+=event.data + "<br>";
}
sse.onerror = function(event) {
console.log(event);
}
</script>
</body>
</html>
脚本调用服务器上的 event-source.php。这是 event-source.php :
<?php
header('Content-type: text/event-stream');
echo 'data: '.time().PHP_EOL;
当我在 Firefox 上尝试此配置时,“onMessage”方法被很好地调用,但在 Chrome 中却没有。当我把“onError”方法,它似乎被调用,但我看不到错误原因。
我该怎么办?
【问题讨论】:
-
在 chrome 版本 22 中尝试过,它有效。
-
不在我的系统上,我在 Ubuntu 12.04 上运行,我尝试使用 Ubuntu 12.04、Chromium 20 和 Chrome 22。此外,onmessage 和 onerror 都在 Firefox 上调用,但事件数据正确显示。 ..
-
在 Chrome 32.0.1700.102 m 上运行良好
-
您的 PHP 代码发送回没有
message信封的数据,但没有保持打开的连接 - 它每秒钟重新建立连接 -
可能不相关,但是当连接通过 HTTP 时,您可以建立的连接数有限制:stackoverflow.com/questions/16852690/… 因此关闭连接是个好主意,例如onbeforeunload 调用 sse.close()
标签: php javascript html