php ajax实现在线聊天
实现 PHP AJAX 在线聊天的步骤
环境准备
确保服务器支持 PHP 和 MySQL,创建一个数据库存储聊天消息。示例表结构:
CREATE TABLE `chat_messages` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`sender` VARCHAR(50) NOT NULL,
`message` TEXT NOT NULL,
`timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
前端页面 (HTML/AJAX)
创建一个聊天界面,使用 jQuery 简化 AJAX 调用:
<div id="chatbox" style="height:300px; overflow-y:scroll;"></div>
<input type="text" id="message" placeholder="输入消息">
<button id="send">发送</button>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
// 发送消息
$('#send').click(function() {
$.post("send_message.php", {
sender: "用户A",
message: $('#message').val()
}, function() {
$('#message').val('');
});
});
// 轮询获取新消息
setInterval(function() {
$.get("get_messages.php", function(data) {
$('#chatbox').html(data);
$('#chatbox').scrollTop($('#chatbox')[0].scrollHeight);
});
}, 1000); // 每秒刷新
</script>
后端处理 (PHP)
创建 send_message.php 处理消息发送:
<?php
$conn = new mysqli("localhost", "username", "password", "chat_db");
$sender = $_POST['sender'];
$message = $conn->real_escape_string($_POST['message']);
$conn->query("INSERT INTO chat_messages (sender, message) VALUES ('$sender', '$message')");
$conn->close();
?>
创建 get_messages.php 返回最新消息:
<?php
$conn = new mysqli("localhost", "username", "password", "chat_db");
$result = $conn->query("SELECT * FROM chat_messages ORDER BY timestamp DESC LIMIT 50");
while($row = $result->fetch_assoc()) {
echo "<p><b>{$row['sender']}:</b> {$row['message']}</p>";
}
$conn->close();
?>
优化建议
数据库优化
为 timestamp 字段添加索引以提高查询效率:
ALTER TABLE `chat_messages` ADD INDEX (`timestamp`);
安全性增强
对用户输入进行过滤防止 XSS 攻击:
$message = htmlspecialchars($conn->real_escape_string($_POST['message']));
实时性改进
考虑使用 WebSocket 替代轮询,或采用长轮询技术减少服务器压力。
扩展功能
添加用户认证系统,消息已读状态标记,或文件上传支持。
注意事项
- 确保 PHP 文件与 HTML 文件在相同域名下以避免跨域问题
- 生产环境应使用 PDO 预处理语句防止 SQL 注入
- 频繁轮询可能增加服务器负载,需根据实际用户量调整间隔时间







