Как вытащить переменнную из подключенного JSON в JS?
Здравствуйте, помогите понять, как вытаскивать переменные из подключаемого файла JSON. Это файл с обновляемыми курсами валют, и нужно потом этот курс использовать для расчетов в других функциях. Например как вытащить переменную "kurs"
$.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { var kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); }); |
$.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { var kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); });
Дополнительно:
function getData() { return new Promise(resolve => { $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { const kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); resolve(kurs); }); }) } function func1(kurs) { console.log(kurs); } function func2(kurs) { console.log(kurs); } async function go() { const kurs = await getData(); $('#euro').html(kyrs); func1(kurs); func2(kurs); } go(); |
function getData() { return new Promise(resolve => { $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { const kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); resolve(kurs); }); }) } function func1(kurs) { console.log(kurs); } function func2(kurs) { console.log(kurs); } async function go() { const kurs = await getData(); $('#euro').html(kyrs); func1(kurs); func2(kurs); } go();
Ответы:
Здравствуйте!
Пробуйте вот так
var kyrs; // объявляем переменную вне функции $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); }); // Теперь переменная kyrs доступна и за пределами функции обратного вызова console.log("Курс: " + kyrs); |
var kyrs; // объявляем переменную вне функции $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); }); // Теперь переменная kyrs доступна и за пределами функции обратного вызова console.log("Курс: " + kyrs);
- Нет, недоступна, пишет NaN. Для проверки можно вытащить $('#euro').html(kyrs); за пределы функции, и она не будет отдавать не какие данные, так же как и консоль
- Проблема, вероятно, связана с тем, что код после $.getJSON выполняется слишком быстро, еще до того, как запрос будет завершен и данные будут получены. Поскольку $.getJSON выполняется асинхронно, console.log("Курс: " + kyrs); может быть выполнен до того, как переменная kyrs будет установлена.
Чтобы решить эту проблему, вы можете переместить код, который зависит от значения kyrs, внутрь функции обратного вызова:
var kyrs; // объявляем переменную вне функции $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); // Теперь переменная kyrs доступна и за пределами функции обратного вызова console.log("Курс: " + kyrs); });
var kyrs; // объявляем переменную вне функции $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", function(data) { kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); // Теперь переменная kyrs доступна и за пределами функции обратного вызова console.log("Курс: " + kyrs); });
Таким образом, код, зависящий от значения kyrs, будет выполнен только после завершения запроса и установки значения переменной.
- RushV, так мне нужно записывать значения огромного масива с кучей переменных, для которого необходимо что бы переменная курса работала за пределами функции JSON. И если бы проблема была только в паре значений, проблемы бы не было)). И если я засуну допустим туда этот массив, это потом не скажется на скорости работы скрипты?
- Axel030392, У меня работает
var kyrs; // объявляем переменную вне функции // Функция, которая принимает данные и обрабатывает их function processCurrencyData(data) { kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); // Теперь переменная kyrs доступна и за пределами функции обратного вызова console.log("Курс: " + kyrs); } // Выполняем запрос и передаем функцию обратного вызова $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", processCurrencyData); // Здесь код выполняется сразу после отправки запроса, но не ждет его завершения // Поэтому переменная kyrs здесь может быть неопределенной // console.log("Курс: " + kyrs);
var kyrs; // объявляем переменную вне функции // Функция, которая принимает данные и обрабатывает их function processCurrencyData(data) { kyrs = Math.ceil(100 / data.Valute.KZT.Value * data.Valute.EUR.Value).toString().replace(/(d)(?=(d{3})+$)/g, '$1 '); $('#euro').html(kyrs); // Теперь переменная kyrs доступна и за пределами функции обратного вызова console.log("Курс: " + kyrs); } // Выполняем запрос и передаем функцию обратного вызова $.getJSON("https://www.cbr-xml-daily.ru/daily_json.js", processCurrencyData); // Здесь код выполняется сразу после отправки запроса, но не ждет его завершения // Поэтому переменная kyrs здесь может быть неопределенной // console.log("Курс: " + kyrs);
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для того чтобы извлечь переменную из подключенного JSON в JavaScript, вам следует сначала загрузить JSON файл и затем преобразовать его в объект JavaScript. Вот пример кода, который показывает, как это можно сделать:
```html
// Создаем новый объект XMLHttpRequest
var xhr = new XMLHttpRequest();
// Указываем URL файла JSON
xhr.open('GET', 'file.json', true);
// Отправляем запрос
xhr.send();
// Обработчик события загрузки файла JSON
xhr.onload = function() {
if (xhr.status == 200) {
// Преобразуем полученный JSON в объект JavaScript
var data = JSON.parse(xhr.responseText);
// Извлекаем переменную из JSON
var myVariable = data.variableName;
// Используем переменную
console.log(myVariable);
} else {
console.log('Ошибка при загрузке файла JSON');
}
};
```
В данном примере мы используем объект XMLHttpRequest для загрузки файла JSON с сервера. После успешной загрузки файла, мы преобразуем его содержимое в объект JavaScript с помощью метода JSON.parse(). Затем мы можем извлечь нужную переменную из объекта и использовать ее в дальнейшем коде.
Убедитесь, что файл JSON находится в том же домене, что и ваш скрипт, чтобы избежать проблем с политикой безопасности браузера. В случае, если файл JSON находится на другом домене, вам может потребоваться использовать JSONP или CORS для загрузки данных.