You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:31:15