javascript - getJSON 不从服务器加载数据
问题描述
有一个表格形式的简单货币转换器。无论我多么努力,我都无法使用该getJSON
功能,以便根据中央银行网站的实际数据进行转换。目前,数组只是复制到 js 文件中。
let json = `{
"Date": "2021-01-21T11:30:00+03:00",
"PreviousDate": "2021-01-20T11:30:00+03:00",
"PreviousURL": "\/\/www.cbr-xml-daily.ru\/archive\/2021\/01\/20\/daily_json.js",
"Timestamp": "2021-01-20T14:00:00+03:00",
"Valute": {
"USD": {
"ID": "R01235",
"NumCode": "840",
"CharCode": "USD",
"Nominal": 1,
"Name": "Доллар США",
"Value": 73.355,
"Previous": 73.7243
},
"EUR": {
"ID": "R01239",
"NumCode": "978",
"CharCode": "EUR",
"Nominal": 1,
"Name": "Евро",
"Value": 89.1483,
"Previous": 89.2064
}
}
}`;
let parsedJSON = JSON.parse(json),
aPrices = [...document.querySelectorAll('.price_cell')]; //Ищем все элементы по селектору .price_cell
aPrices.forEach(item => { //Выполняем функцию один раз для каждого элемента в массиве
item.dataset.originalPrice = item.textContent
});
function fReCalc(sValute, sChar) { //Задаем функцию , выполняем ее 1 раз, значение в таблице меняем на новое + добавляем символ валюты
aPrices.forEach(item => {
item.textContent = Math.ceil(parseFloat(item.dataset.originalPrice) / parseFloat(parsedJSON.Valute[sValute].Value)) + sChar //Делим значение в таблице на выбранный курс валюты, округляем вверх и добавляем значек валюты
});
}
document.querySelector('.usd').addEventListener('click', fReCalc.bind(this, 'USD', '$')); //Возвращаем элемент и регестрируем обработчик
document.querySelector('.eur').addEventListener('click', fReCalc.bind(this, 'EUR', '€'));
.table { width: 300px; }
.row { display: flex; border-bottom: 1px solid black; width: 100%; }
.cell { width: 50%; padding: 10px; margin: 0 5px; }
<!DOCTYPE html>
<html lang="en">
<head>
<title>TITLE</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="css/style.css" rel="stylesheet">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
</head>
<body>
<div class="table">
<div class="row">
<div class="cell">NAME</div><div class="cell">PRICE</div>
</div>
<div class="row">
<div class="cell">PRODUCT1</div><div class="cell price_cell">1000</div>
</div>
<div class="row">
<div class="cell">PRODUCT2</div><div class="cell price_cell">2000</div>
</div>
</div>
<button class="usd">$</button>
<button class="eur">€</button>
<script src="js/index.js" async defer></script>
</body>
</html>
解决方案
在使用目标变量之前添加一个setTimeout对我有用。
var data = {};
$.getJSON('https://www.cbr-xml-daily.ru/archive/2021/01/20/daily_json.js', function(resp) {
data = Object.assign({}, resp);
});
setTimeout(function(){
console.log(data);
}, 200);
推荐阅读
- r - 如何圆角(圆形)SF 线交点的内角
- regex - sed 只区分大小写的一部分
- mongodb - MongoParseError:权限部分中未提供用户名
- python-3.x - Python Lambda 表达式 - 返回列表和另一个列表之间的操作
- android - 如何使用这个已经构建的数据库类向我的数据库抛出查询,例如 Android 上的“SELECT * FROM TABLE”?
- python - 在 GPU 上具有 Cuda 低 FPS 的 OpenCV Python
- c - 验证 IPv6 地址是 C 中的子网路由器任播地址
- scala - 在不更改父 trait 或 case 类的情况下创建类型敏感函数
- html - `溢出:滚动` div中的z-index不起作用
- python - 我可以使用 pyautogui 用光标捕获屏幕截图吗