$.getJSON调用PHP接口无法获取MySQL数据库最新数据问题求助
问题原因
该现象是HTTP缓存机制导致的:你首次访问db.php后,浏览器会默认缓存该接口返回的JSON结果,后续前端发起重复请求时,会直接读取本地缓存的旧数据,不会请求服务器执行PHP脚本拉取最新数据库内容。
解决方案
1. 服务端(db.php)添加禁用缓存的HTTP头
在db.php文件最顶部(所有输出内容之前)添加如下代码,强制要求所有客户端、代理服务器都不缓存该接口的返回结果:
<?php // 禁用缓存头,放在所有代码最开头 header("Cache-Control: no-cache, no-store, must-revalidate"); header("Pragma: no-cache"); header("Expires: 0"); // 以下是原有业务代码不变 include ("database_connect.php"); $sql = "SELECT * FROM markers"; $result = $conn->query($sql); $array = array(); $i = 0; while($row = $result->fetch_assoc()) { $array[$i] = $row; $i++; } echo json_encode($array); $conn->close(); ?>
2. 前端请求添加防缓存参数
两种方案选其一即可:
- 方案A:给请求地址拼接时间戳参数,让每次请求的URL唯一,绕开缓存
<script> // 地址后加_参数,值为当前时间戳,每次请求都不同 $.getJSON('db.php?_=' + new Date().getTime(), function(data) { console.log(data); }); </script>
- 方案B:全局设置jQuery AJAX禁用缓存,适合页面内有多个接口需要禁用缓存的场景
<script> // 全局配置,放在所有AJAX请求之前 $.ajaxSetup({ cache: false }); $.getJSON('db.php', function(data) { console.log(data); }); </script>
额外注意事项
确保你访问db.html时是通过HTTP/HTTPS协议访问(地址栏为http://localhost/xxx/db.html格式),不要直接双击文件用file://协议打开,file协议下会出现请求异常、缓存规则不生效的问题。
内容的提问来源于stack exchange,提问作者Colin Davis
相关产品推荐
相关产品推荐

