【发布时间】:2012-07-06 06:20:17
【问题描述】:
我正在试验 HTML5 和 node.js。我已经测试了服务器发送事件,它们运行良好(参考this example)。
接下来,我尝试使用 SSE 回复按钮按下。在按下“增量”按钮时,我从文本框中选择一个数字并使用 GET 消息将其传递给服务器。然后服务器将响应一个包含递增数字的事件。然后 eventListener 将使用接收到的数字更新文本框。我还在 HTML 页面上添加了一个“消息区域”来记录消息。
这就是计划。但是,当我单击该按钮时,浏览器会在窗口底部显示“正在下载”操作,但它从未完成,结果不会在屏幕上更新,消息也不会显示在页面底部。
当我在页面加载时发送它们时,这些事件工作正常。但是当我发送它以响应 GET 消息时,HTML 页面没有显示任何响应。
这里是 HTML 部分。
<form action="/upload" method="get">
<p>Set the temperature and click on send</p>
<input name="temperature" id="TemperatureBox" type="text" value = "33" />
<button type="submit" onclick="form.action='http://localhost:8888/Increment'">Increment</button>
我为消息和“温度事件”添加了处理程序,它将更新温度框
var source = new EventSource('/events');
source.addEventListener('message', function(e) {
//code to display message
}, false);
source.addEventListener('TemperatureValueUpdate', function(e) {
AddLog('TemperatureValueUpdate Listener >> lastEventID: ' + (e.lastEventId || '--') +
', e.data: ' + e.data
+ 'Current value of text box: ' + document.getElementById('TemperatureBox').value);
document.getElementById('TemperatureBox').value= e.data;
}, false);
在 node.js 脚本中,我发送一条消息和一个 TemperatureValueUpdate
function constructTemperature(response, id, data) {
console.log("Sending Temperature event");
// response.write('id: ' + (new Date()).toLocaleTimeString()+ '\n');
// response.write("data: " + 'Teperature event sent '+ '\n\n');
response.write('event: ' + 'TemperatureValueUpdate' + '\n');
response.write('id: ' + id + '\n');
response.write("data: " + data + '\n\n');
console.log("Finished Temperature event"); }
我还回复了页面加载时的“/events”网址,回复为 200:
response.writeHead(200, {'Content-Type': 'text/event-stream','Cache-Control': 'no-cache', 'Connection': 'keep-alive' });
我什至尝试过以下方法
- 在发送事件之前发送 202/204 响应
- 在发送事件之前/之后发送 response.end()
- 在每个事件之前发送“Content-Type”:“text/event-stream”
但它们不会产生预期的结果。我在这里做错了什么?
【问题讨论】:
标签: html node.js server-sent-events