如何使用jQuery AJAX实时获取数据库状态变更?
实现AJAX轮询监控状态变化
前端jQuery实现(轮询逻辑)
封装递归函数,当状态为pending时持续发起请求,直到状态变为success或error:
function checkStatus(recordId) { $.ajax({ type: 'GET', url: `getStatus.php?record_id=${recordId}`, dataType: 'json', success: function(response) { const status = response.status; console.log('当前状态:', status); if (status === 'pending') { // 延迟1秒后再次发起请求,避免频繁调用 setTimeout(() => checkStatus(recordId), 1000); } else { // 状态非pending,终止轮询并处理结果 if (status === 'success') { console.log('操作成功!'); // 可添加成功后的业务逻辑 } else if (status === 'error') { console.log('操作失败!'); // 可添加失败后的业务逻辑 } } }, error: function(xhr, status, error) { console.error('请求出错:', error); // 请求出错时可选择停止轮询或重试 } }); } // 启动轮询,传入目标record_id checkStatus(50);
后端PHP代码修正
1. getStatus.php 调整
确保参数校验与JSON格式返回:
<?php require_once 'class/class.php'; // 修正语法错误,移除多余括号 $stat = new Stat(); // 校验record_id有效性 if (!isset($_GET['record_id']) || !is_numeric($_GET['record_id'])) { echo json_encode(['status' => 'error', 'message' => '无效的record_id']); exit; } $record_id = (int)$_GET['record_id']; $statusData = $stat->getStatus($record_id); echo json_encode($statusData); ?>
2. getStatus() 类方法优化(防SQL注入+规范返回结构)
使用预处理语句避免注入风险,返回统一JSON结构:
public function getStatus($record_id) { // 预处理语句防止SQL注入 $query = "SELECT `status` FROM records WHERE `record_id` = ?"; $stmt = $this->db->prepare($query); // 假设$this->db为数据库连接实例 $stmt->bind_param("i", $record_id); // 绑定整数类型参数 $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); return ['status' => $row['status']]; } else { return ['status' => 'error', 'message' => '记录不存在']; } }
关键说明
- 轮询延迟:设置
setTimeout间隔(示例为1秒),避免短时间大量请求压垮服务器,可根据业务调整。 - 错误处理:前端
error回调需处理网络、服务器异常等情况,避免无限等待。 - SQL防护:必须用预处理语句处理用户输入,禁止直接拼接SQL。
- 格式统一:前后端用JSON交互,确保状态解析准确。
内容的提问来源于stack exchange,提问作者Ervis Hysi
相关产品推荐
相关产品推荐

