2016-04-19 3 views
0

Я использую этот код:d3js: d3.csv и это данные исчезают

var map_json; // in global scope 
var map; 
... 
function get_data() { 
    map_json = d3.json("data/russia_1e_7sr.json", function (e, d) { 
     map = d; 
    }); 
    // ... draw map 
} 

Если отладить этот код, то я вижу результат. Если я закрываю отладчик, а затем обновляю страницу, результаты исчезают.

Я предлагаю что-то, что происходит с памятью объекта. Но что?

Каков правильный способ получить данные с помощью d3? Да, я вижу такие примеры этого:

d3.csv("file.csv", function(e,d) { 
    // ... use d 
    // all things processed inside this function 
} 

Что делать, если я хочу, чтобы загрузить несколько частей данных из разных источников?

+1

Это асинхронная функция 'callback', что означает, что она не срабатывает в линейной последовательности с остальной частью программы. В результате ваш код рисования загорается перед загрузкой файла. Вы должны вызвать функцию для рисования карты из обратного вызова для линейного потока. Для загрузки нескольких источников вы можете либо вложить нагрузки (загрузка в обратном вызове другого), либо определить счетчик, который вы увеличиваете с каждым обратным вызовом, и когда он равен количеству частей данных, которые вы вызываете окончательной функцией. – JSBob

+0

Я только что начал с js. Спасибо за хорошее объяснение: я понял. –

ответ

0

Вам нужно сдвинуть немного Жеребьевка карты:

var map_json; // in global scope 

... 
function get_data() { 
    map_json = d3.json("data/russia_1e_7sr.json", function (e, d) { 
     var map;= d; 
     // ... draw map 
    }); 
} 

map не будет заселена еще где есть.

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