方法 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 支持的服务器。

作者 admin

百度广告效果展示