2014-02-12 4 views
0

Это мой код из HTML-файла в тег сценарияОшибка не определен

var links; 
d3.json("sample.json",function(json){links=json;}); 

var inputlinks=[]; 
var nodes = {}; 

inputlinks.push(links); 
// Compute the distinct nodes from the links. 
links.forEach(function(link) { 
link.source = nodes[link.source] || (nodes[link.source] = {name: link.source, type:link.type}); 
link.target = nodes[link.target] || (nodes[link.target] = {name: link.target, type:link.typeKBP}); 
    }); 

В этом коде я получаю сообщение об ошибке

TypeError: links is undefined 
    links.forEach(function(link) 
+0

Является ли 'd3.json' асинхронным? –

ответ

2

Как было отмечено в комментариях, d3.json является асинхронный вызов. Это означает, что код в функции обработчика будет запущен, когда он вернется, а не сразу. Код после него бежать сразу же.

Чтобы исправить, переместите оставшуюся часть кода внутри функции обработчика:

d3.json("sample.json",function(json){ 
    var links = json; 
    var inputlinks=[]; 
    var nodes = {}; 

    inputlinks.push(links); 
    // Compute the distinct nodes from the links. 
    links.forEach(function(link) { 
    link.source = nodes[link.source] || (nodes[link.source] = {name: link.source, type:link.type}); 
    link.target = nodes[link.target] || (nodes[link.target] = {name: link.target, type:link.typeKBP}); 
    }); 
}); 
2

Из предоставленной Вами информации, я могу только догадываться, что вы должны включать все ваши loginc inide обратного вызова:

var links; 
d3.json("sample.json",function(json){ 
    links=json; 
    var inputlinks=[]; 
    var nodes = {}; 

    inputlinks.push(links); 
    // Compute the distinct nodes from the links. 
    links.forEach(function(link) { 
    link.source = nodes[link.source] || (nodes[link.source] = {name: link.source, type:link.type}); 
    link.target = nodes[link.target] || (nodes[link.target] = {name: link.target, type:link.typeKBP}); 
    }); 
}); 
Смежные вопросы