如何从GoldAPI获取指定字段并实现黄金价格页面实时更新?
解决黄金价格应用的两个核心需求
1. 从API响应中提取指定数据字段
你的现有PHP代码直接输出了完整的API响应,要提取单个字段,只需把JSON响应解析为PHP数组,再按需取值即可。修改后的代码如下:
<?php $apiKey = "*****"; $symbol = "XAU"; $curr = "USD"; $date = ""; $myHeaders = array( 'x-access-token: ' . $apiKey, 'Content-Type: application/json' ); $curl = curl_init(); $url = "https://www.goldapi.io/api/{$symbol}/{$curr}{$date}"; curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPHEADER => $myHeaders )); $response = curl_exec($curl); $error = curl_error($curl); curl_close($curl); if ($error) { echo json_encode(['error' => 'Error: ' . $error]); } else { // 解析JSON响应为关联数组 $data = json_decode($response, true); // 提取需要的字段,比如low_price和timestamp $result = [ 'low_price' => $data['low_price'] ?? 'N/A', 'timestamp' => $data['timestamp'] ?? 'N/A', // 可按需添加更多字段 'price' => $data['price'] ?? 'N/A' ]; // 输出格式化后的JSON数据,方便前端处理 echo json_encode($result); } ?>
- 用
json_decode($response, true)将API返回的JSON字符串转为PHP关联数组 - 通过数组键名直接获取目标字段,用
?? 'N/A'处理字段不存在的情况,避免报错 - 最后把提取后的字段重新编码为JSON输出,适配前端异步请求
2. 实现无刷新实时数据更新
要做到页面不刷新就能更新数据,需要用JavaScript定时请求上述PHP接口,再更新页面DOM元素。示例代码如下:
HTML结构
<div class="gold-price-card"> <p>当前金价: <span id="current-price">--</span></p> <p>今日最低价: <span id="low-price">--</span></p> <p>更新时间: <span id="update-time">--</span></p> </div>
JavaScript代码
// 定义更新金价数据的函数 function refreshGoldPrice() { // 请求你的PHP接口文件(假设命名为gold-fetcher.php) fetch('gold-fetcher.php') .then(res => res.json()) .then(data => { if (data.error) { document.getElementById('current-price').textContent = '加载失败'; return; } // 更新页面元素内容 document.getElementById('current-price').textContent = `${data.price} USD`; document.getElementById('low-price').textContent = `${data.low_price} USD`; // 将时间戳转为可读格式 const updateTime = new Date(data.timestamp * 1000); document.getElementById('update-time').textContent = updateTime.toLocaleString(); }) .catch(err => { console.error('请求出错:', err); document.getElementById('current-price').textContent = '加载失败'; }); } // 页面加载完成后立即更新一次 window.onload = refreshGoldPrice; // 设置定时更新,比如每30秒更新一次(需符合API调用限制) setInterval(refreshGoldPrice, 30000);
- 用
fetch发起异步请求,获取PHP接口返回的结构化数据 - 解析数据后直接更新页面对应元素,实现无刷新更新
- 用
setInterval定时触发更新函数,时间间隔需参考GoldAPI的调用限制,避免触发限流 - 处理了请求错误的情况,提升页面稳定性
内容的提问来源于stack exchange,提问作者Sudha
相关产品推荐
相关产品推荐

