使用Fixer汇率API时JQuery无法获取指定汇率,拼接输入失效求助
问题分析与修正方案
让我帮你拆解下代码里的几个关键错误,其实核心是对API返回结构和jQuery Ajax回调参数的理解出现了偏差:
1. 回调参数命名与结构理解错误
Fixer API返回的是一个完整的JSON对象,结构大概是这样的:
{ "base": "USD", "date": "2024-05-20", "rates": { "JPY": 151.23, "EUR": 0.92, "GBP": 0.79 } }
你把success回调的参数命名为rates,但这个参数其实是整个响应对象,不是里面的rates子属性。这就导致你后续的$.each循环遍历的是base、date、rates这三个顶级键,而不是实际的汇率数据。
2. 错误的判断逻辑与属性获取方式
你的if(exchangeRates+"."+ "JPY")完全是无效逻辑:这只是把当前循环的value和字符串拼接成一个非空字符串,在JavaScript里非空字符串永远会被判定为true,所以这个判断根本起不到筛选作用。而且你试图用字符串拼接的方式获取对象属性,这完全不是正确的做法——获取对象属性应该用.或者[]语法,比如exchangeRates.JPY或者exchangeRates["JPY"]。
3. 冗余的循环操作
如果你只是想获取USD对JPY的汇率,根本不需要用$.each循环遍历所有数据,直接访问响应对象里的rates.JPY就可以了,非常高效。
修正后的代码
方案1:直接获取特定货币(JPY)的汇率
var link1 = "https://api.fixer.io/latest?base=USD"; $.ajax({ type: "GET", url: link1, success: function(response) { // 直接访问rates对象下的JPY属性 var usdToJpyRate = response.rates.JPY; if (usdToJpyRate) { console.log("USD兑换JPY的汇率:", usdToJpyRate); } else { console.log("无法获取JPY的汇率数据"); } }, // 建议加上错误回调,方便排查请求问题 error: function(xhr, status, error) { console.log("API请求出错:", error); } });
方案2:遍历所有汇率并单独处理JPY
如果需要遍历所有汇率同时单独处理JPY,可以这样写:
var link1 = "https://api.fixer.io/latest?base=USD"; $.ajax({ type: "GET", url: link1, success: function(response) { // 遍历rates对象里的所有键值对(货币代码:汇率) $.each(response.rates, function(currencyCode, rate) { console.log(`${currencyCode}汇率:${rate}`); // 单独处理JPY的情况 if (currencyCode === "JPY") { console.log("USD兑换JPY的汇率:", rate); } }); }, error: function(xhr, status, error) { console.log("API请求出错:", error); } });
小提示
你可以先在浏览器地址栏直接访问https://api.fixer.io/latest?base=USD,查看返回的JSON结构,这样能更直观地理解如何提取数据。
内容的提问来源于stack exchange,提问作者alittlecurryhot
相关产品推荐
相关产品推荐

