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

JS货币转换器JSON接口解析异常 汇率计算功能失效排查

问题根源

功能失效由3个核心错误导致:

  • 接口请求URL拼接错误:当前写法?json${currency_one}不符合乌克兰央行公开接口的参数规则,且该接口默认返回全量外币兑格里夫纳(UAH)的汇率列表,不存在你代码中写的conversion_rates顶层字段
  • 数据字段引用完全不匹配返回结构:你写的data.conversion_rates[currency_two]是其他商业汇率API的返回格式,乌克兰央行接口返回的是数组结构,单条汇率数据中cc字段存货币代码、rate字段存1单位对应外币兑UAH的汇率
  • 缺少交叉汇率计算逻辑:该接口只提供外币兑UAH的基准汇率,没有直接提供任意两种非UAH货币的兑换汇率,需要手动通过基准价交叉计算
修复后的核心JS代码

替换原有的JS逻辑即可:

const currencyEl_one = document.getElementById('currency-one');
const currencyEl_two = document.getElementById('currency-two');
const amountEl_one = document.getElementById('amount-one');
const amountEl_two = document.getElementById('amount-two');

const rateEl = document.getElementById('rate');
const swap = document.getElementById('swap');

function converter() {
  const currency_one = currencyEl_one.value;
  const currency_two = currencyEl_two.value;

  fetch("https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json")
    .then((res) => res.json())
    .then((data) => {
      // 组装汇率映射表,UAH兑自身汇率固定为1
      const rateMap = { UAH: 1 };
      data.forEach(item => {
        rateMap[item.cc] = item.rate;
      });
      // 交叉计算任意两种货币的汇率
      const exchangeRate = rateMap[currency_one] / rateMap[currency_two];
      rateEl.innerText = `1 ${currency_one} = ${exchangeRate.toFixed(4)} ${currency_two}`;
      amountEl_two.value = (amountEl_one.value * exchangeRate).toFixed(2);
    })
    .catch(() => {
      rateEl.innerText = '汇率加载失败,请检查网络后重试';
    });
}

// 事件监听
currencyEl_one.addEventListener('change', converter);
amountEl_one.addEventListener('input', converter);
currencyEl_two.addEventListener('change', converter);
amountEl_two.addEventListener('input', converter);
swap.addEventListener('click', () => {
  const temp = currencyEl_one.value;
  currencyEl_one.value = currencyEl_two.value;
  currencyEl_two.value = temp;
  converter();
});

converter();
其他待修复问题
  • HTML结构不规范:<select>标签内部只能嵌套<option>、<optgroup>标签,你当前写在select内部的<div>、<svg>会被浏览器自动解析到select外部,可能导致选项值获取异常,建议将国旗图标改为绝对定位放在select外侧
  • CSS媒体查询拼写错误:@media (maz-width: 600px)中maz-width应为max-width

内容的提问来源于stack exchange,提问作者Андрей Хотюн

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:27:22