方法 1: 使用 EventSource
(Server-Sent Events, SSE)
EventSource
是一种简单的方式,用于从服务器获取流式数据(即实时推送数据)。这种方法不需要轮询,服务器会持续推送数据。
// 创建 EventSource 连接
const eventSource = new EventSource(‘chat.php?q=some_query’);
// 监听 ‘message’ 事件,处理服务器发送的流数据
eventSource.onmessage = function(event) {
const data = event.data; // 获取服务器推送的数据
$(‘#output’).append(data + ‘<br>’); // 在页面上展示数据
};
// 错误处理
eventSource.onerror = function(event) {
console.error(‘Error occurred:’, event);
eventSource.close();
};
说明:
EventSource 用于从服务器流式接收数据。每当服务器发送数据时,onmessage 事件触发,数据通过 event.data 获取。
chat.php?q=some_query 是你的服务器端接口,需要返回流式数据。
使用 append 方法将每次接收到的数据添加到页面的 #output 元素中。
方法 2: 使用 XMLHttpRequest
(带流式响应的轮询)
如果你的服务器不支持 SSE(Server-Sent Events),你可以使用 XMLHttpRequest
模拟流式请求,通过不断接收数据。
说明:
XMLHttpRequest 请求的流数据在 onreadystatechange 中进行处理。当 readyState 为 3(正在接收数据)时,我们从 responseText 中提取出最新的内容。
每次收到新的数据,都会通过 append 添加到页面的 #output 元素中。
总结:
-
方法 1: 使用
EventSource
是实现流式数据接收的推荐方法,适用于支持 SSE 的服务端。 -
方法 2: 使用
XMLHttpRequest
是另一种可行方法,通过轮询和解析响应文本来处理流式数据,适用于没有 SSE 支持的服务器。