无法将jQuery获取的JSON数据存入变量并展示的问题
解决JSON价格存入变量并计算的问题
嘿,我一眼就看出你遇到的问题啦——AJAX请求的异步特性在搞鬼!咱们一步步拆解问题,然后搞定它~
问题根源
你写的$.get是异步请求,意思是浏览器会在后台发送请求拿数据,同时继续执行后面的代码。当你执行$('#tronpricefromvar').html(tronPrice);的时候,请求还没完成,tronPrice还是初始的undefined,自然显示不出来。另外,你之前尝试tronPrice = $("#tron").html(data[0].price_usd);也不对,因为html()方法设置内容后返回的是jQuery对象,不是你要的价格数值哦。
解决方案:把依赖数据的操作放到回调里
所有需要用到这个价格数据的逻辑,都得放到$.get的回调函数里——因为只有回调执行时,才确保咱们已经拿到了从API返回的JSON数据。
修改后的完整代码如下:
<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script> var tronQty = 5000.00; // 持有的TRX数量 var tronPrice; // 存储价格的变量 $.get("https://api.coinmarketcap.com/v1/ticker/tron/", function(data, status) { // 直接从返回的JSON数据中提取价格,转成数字方便后续计算 tronPrice = parseFloat(data[0].price_usd); // 更新页面上的价格展示 $("#tron").html(tronPrice); // 用变量更新第二个容器的内容 $('#tronpricefromvar').html(tronPrice); // 这里可以直接计算总价值啦! var totalValue = tronQty * tronPrice; console.log("你的TRX总价值(USD):" + totalValue.toFixed(2)); }); </script> </head> <body> Tron <br> Price: <div id="tron"></div> <br> Price from var: <div id="tronpricefromvar"></div> </body> </html>
关键点说明
- 异步回调的时机:回调函数会在API请求成功返回后执行,所以所有依赖
tronPrice的操作(比如计算总价值、更新页面)都要放在这里面。 - 数据类型转换:用
parseFloat()把API返回的价格字符串转成数字,这样才能和tronQty做乘法运算。如果需要保留小数位数,可以用toFixed(2)之类的方法格式化。
可选:用更现代的异步语法(Async/Await)
如果你习惯更简洁的异步写法,也可以用async/await来处理jQuery的AJAX请求(jQuery的$.get返回的是Deferred对象,支持await):
<script> var tronQty = 5000.00; var tronPrice; async function fetchTronPrice() { try { // 等待请求完成,拿到数据 const data = await $.get("https://api.coinmarketcap.com/v1/ticker/tron/"); tronPrice = parseFloat(data[0].price_usd); $("#tron").html(tronPrice); $('#tronpricefromvar').html(tronPrice); const totalValue = tronQty * tronPrice; console.log("你的TRX总价值(USD):" + totalValue.toFixed(2)); } catch (err) { console.error("获取价格失败:", err); } } // 调用异步函数 fetchTronPrice(); </script>
这样写逻辑更线性,可读性更高,适合处理复杂的异步流程。
内容的提问来源于stack exchange,提问作者user1401561
相关产品推荐
相关产品推荐

