Javascript 在d3中使用json数据

Javascript 在d3中使用json数据,javascript,d3.js,Javascript,D3.js,我希望稍后在我的代码中使用json数据,因此我将其放入一个变量中,并将该变量返回给一个函数。如果我对json数据进行硬编码,它就会工作(见下文,代码的第二部分只是为了检查它是否工作) 但是如果我从一个文件中读取json代码,它就不起作用(见下文) 我哪里出错了? 您正在向函数中的“statsread.php”发出异步请求,因此您将立即获得数据。因此var read=read()将是未定义的 当API出现故障时,变量“readkwc、readvic、read90”将不可用,因此您也需要处理故障情况

我希望稍后在我的代码中使用json数据,因此我将其放入一个变量中,并将该变量返回给一个函数。如果我对json数据进行硬编码,它就会工作(见下文,代码的第二部分只是为了检查它是否工作)

但是如果我从一个文件中读取json代码,它就不起作用(见下文)

我哪里出错了?

  • 您正在向函数中的“statsread.php”发出异步请求,因此您将立即获得数据。因此
    var read=read()将是未定义的

  • 当API出现故障时,变量“readkwc、readvic、read90”将不可用,因此您也需要处理故障情况

这是解决办法

var body=d3.选择('body');
函数read(){
json(“statsread.php”),函数(错误,数据){
如果(错误)返回控制台。警告(错误);
data.forEach(函数(d){
readkwc=d.KWC;
readvic=d.Vic;
read90=d.P90;
});
var read=[readkwc、readvic、read90];
body.append('p')
.text(读取[0])
.append('p')
.文本(改为[1])
.append('p')
.文本(改为[2]);
});
}
read()

谢谢湿婆,但这似乎只回答了我一半的问题。我需要read[0]、read[1]和read[2]中的值在函数外部可用,而在您的修复程序中,它们仅在函数内部可用。您可以在函数外部声明变量read并使用它,但在使用它之前,请检查XHR请求是否已完成
function read() {
var data = [{"APSYear":"2014","Domain":"Reading","Level":"3","KWC":"469.62","Aus":"418.3","Vic":"431.7","P90":"544.92"}];
data.forEach(function(d) {
     readkwc = d.KWC;
     readvic = d.Vic;
     read90 = d.P90;    
});
return [readkwc, readvic, read90];
}
var read = read();
var body = d3.select('body');
body.append('p')
    .text(read[0])
    .append('p')
    .text(read[1])
    .append('p')
    .text(read[2]);
function read() {
d3.json("statsread.php", function(error, data) {
data.forEach(function(d) {
    readkwc = d.KWC;
    readvic = d.Vic;
    read90 = d.P90; 
    });
}); 
return [readkwc, readvic, read90];
}
var read = read();
var body = d3.select('body');
    body.append('p')
        .text(read[0])
        .append('p')
        .text(read[1])
        .append('p')
        .text(read[2]);