2013-06-25 2 views
9

Я хочу, чтобы получить данные в глобальной переменной, используя следующий код:переменная сфера в d3 Javascript

var data; 
d3.json ("file.json" , function(json) { 
    data = json; 
    console.log(data); //defined 
}); 
console.log(data); //undefined 

Но проблема в том, что я просто переменная данные определены в функции d3.json, но из него не определено , как я могу решить эту проблему?

Благодаря

ответ

17

Поскольку d3 запросов (например, d3.json) являются асинхронными, это лучшая практика, чтобы обернуть весь код в зависимости от вашего внешнего запроса в рамках запроса обратного вызова, гарантируя, что этот код имеет доступ к данным до выполнения. From the D3 docs: «При асинхронной загрузке данных код, зависящий от загруженных данных, обычно должен существовать в функции обратного вызова».

Таким образом, один из вариантов заключается в том, чтобы поместить весь ваш код в функцию обратного вызова. Если вы хотите, чтобы отделить код на части, вы можете также передать ответ от Вашего запроса на отдельную функцию, что-то вроде этого:

function myFunc(data) { 
    console.log(data); 
} 

d3.json('file.json', function (data) { 
    var json = data; 
    myFunc(json); 
} 
+0

благодарит Nikhils за вашу помощь и ваши объяснения, он работает сейчас для меня – I3i0

Смежные вопросы