Я хочу получить данные в глобальной переменной, используя следующий код:
var data;
d3.json ( "file.json" , function(json) {
data = json;
console.log(data); //defined
});
console.log(data); //undefined
Но проблема в том, что у меня есть только переменная данных, определенная в функции d3.json, но это undefined.
как я могу решить эту проблему?
Спасибо
Ответ 1
Поскольку запросы d3 (например, d3.json
) являются асинхронными, рекомендуется обернуть весь код, зависящий от вашего внешнего запроса, в обратный вызов запроса, гарантируя, что этот код имеет доступ к данным перед выполнением. Из документов D3: "При асинхронной загрузке данных код, который зависит от загруженных данных, обычно должен существовать в функции обратного вызова".
Таким образом, один вариант - поместить весь ваш код в функцию обратного вызова. Если вы хотите разделить код на части, вы также можете передать ответ на ваш запрос в отдельную функцию, например, так:
function myFunc(data) {
console.log(data);
}
d3.json('file.json', function (data) {
var json = data;
myFunc(json);
});