怎么用Ajax实时拿数据库数据然后页面马上显示出来,动态刷新那种效果怎么弄
- 问答
- 2026-01-01 11:49:10
- 1
要做出那种页面上数据不用刷新就自动变化的效果,比如股票行情、在线聊天、或者实时更新的订单列表,核心就是用Ajax技术去“悄悄地”向服务器要数据,然后用JavaScript把新数据填到页面上,这个过程可以手动触发,比如点个按钮,但要做到“实时”和“动态”,关键是让它自动地、周期性地执行,或者由服务器主动推送数据,下面我分几种常见情况来说说具体怎么弄。
第一种最简单的方法是轮询,说白了,就是让页面每隔几秒钟就自动问一次服务器:“有新数据吗?”不管有没有,服务器都给你个回应,如果有新数据,页面就更新显示;如果没有,就等下次再问,这种方法实现起来很简单。
具体怎么做呢?你可以用JavaScript里的setInterval函数来设定一个定时器,每隔5秒就执行一次Ajax请求,Ajax请求你可以用原始的XMLHttpRequest对象来写,但现在更常用、更简单的是fetch API,下面是一个极简的例子,假设服务器上有一个叫get_latest_data.php的接口,它会返回最新的数据(通常是JSON格式)。
// 每隔5秒执行一次
setInterval(function() {
// 使用fetch API向服务器发送请求
fetch('get_latest_data.php')
.then(response => response.json()) // 将响应解析为JSON格式
.then(data => {
// 请求成功,拿到数据data
// 在这里更新页面内容,假设数据显示在一个id为"content"的div里
document.getElementById('content').innerHTML = data.newContent;
})
.catch(error => {
// 如果请求出错,在这里处理错误
console.error('获取数据出错:', error);
});
}, 5000); // 5000毫秒,即5秒
(参考来源:普通前端开发中关于定时器和Ajax的基本用法)
这个方法的优点是兼容性好,实现简单,但缺点也很明显:如果数据变化不频繁,很多次请求都是白问的,浪费网络流量和服务器资源,数据更新有延迟,最快也要等一个间隔时间(比如5秒)才能看到。
第二种更高效的方法是长轮询,这种方法比普通轮询聪明一点,页面还是向服务器发请求,但服务器不会马上回应,它会把这个请求挂起,直到真的有新数据了,或者等待超时了,才给回应,页面收到回应后,处理完数据,立刻再发一个新的请求给服务器,继续等待,这样就能保证一旦数据有变化,客户端能几乎马上收到。

长轮询的实现稍微复杂一点,需要在服务器端配合,让请求保持连接而不是立即返回,对前端JavaScript来说,写法上和轮询类似,但通常会用递归函数来代替setInterval,确保上一次请求结束后再发起下一次请求。
function longPoll() {
fetch('get_latest_data_long_poll.php')
.then(response => response.json())
.then(data => {
// 处理收到的数据
updatePage(data);
// 处理完数据后,立即发起下一次长轮询请求
longPoll();
})
.catch(error => {
// 出错也等一会儿再试,避免因连续出错导致频繁请求
console.error('长轮询出错,3秒后重试:', error);
setTimeout(longPoll, 3000);
});
}
// 启动长轮询
longPoll();
(参考来源:Comet技术理念中的长轮询实现方式)
长轮询减少了不必要的请求,响应比普通轮询更及时,但对服务器来说,保持大量连接也是一种负担。

第三种是目前最先进、效率也最高的方法:WebSocket,它和HTTP不同,是在浏览器和服务器之间建立一个持久的、全双工的通信通道,连接建立后,服务器可以在任何时候主动向客户端推送数据,不需要客户端傻傻地等或者反复问,这才是真正的“实时”。
使用WebSocket的步骤是:首先在前端创建一个WebSocket连接,指定服务器的WebSocket地址(通常是ws://或wss://开头),然后监听这个连接上的事件,比如onopen(连接建立成功)、onmessage(收到服务器消息)、onerror(出错)、onclose(连接关闭)。
// 创建WebSocket连接,连接到服务器端的WebSocket服务
const socket = new WebSocket('wss://yourserver.com/ws');
// 连接打开时触发
socket.onopen = function(event) {
console.log('WebSocket连接已建立');
};
// 收到服务器消息时触发
socket.onmessage = function(event) {
// 服务器发送的数据在event.data中,通常是JSON字符串
const data = JSON.parse(event.data);
// 用收到的数据更新页面
updatePage(data);
};
// 连接关闭时触发
socket.onclose = function(event) {
console.log('WebSocket连接已关闭');
};
// 如果需要向服务器发送数据,可以使用send方法
// socket.send(JSON.stringify({type: 'some_message'}));
(参考来源:MDN Web Docs中关于WebSocket API的文档)
WebSocket的优点是实时性极高,服务器推送是即时的,而且开销小,缺点是服务器需要专门支持WebSocket协议,比处理HTTP请求要复杂一些,并且对于非常老旧的浏览器可能不支持。
选择哪种方法要看你的具体需求,如果只是简单的、对实时性要求不高的更新,用普通轮询就够了,简单快捷,如果希望更及时且减少无效请求,可以考虑长轮询,如果追求真正的实时性和高性能,并且服务器条件允许,那么WebSocket是最佳选择,无论用哪种方法,前端的基本思路都是一样的:通过JavaScript异步获取数据,然后操作DOM(文档对象模型)来更新页面上对应的部分。
本文由酒紫萱于2026-01-01发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/72434.html
