外部APIからのJSONデータをD3グラフに読み込む際に問題があります。私はQuandlのAPIを使用して、一定期間に渡ってブレント油価格をロードしています。これは、グラフ化しようとしているデータです。プロジェクトでAngularを使用していますので、AJAXコールを作成してスコープに渡すサービスを用意しました。これは、私がD3コードに関与しようとしない限り、正常に実行できます。角型AJAX呼び出しからのデータをD3グラフにロード
私が行うとき、私はいくつかのエラーを取得:
GET http://localhost:3000/[object%20Object] 404 (Not Found)
と、この:
私がよく理解できない私のD3-コードにいくつかのエラーに関連付けられていUncaught TypeError: Cannot read property 'forEach' of undefined
。
app.service('oilService', function($http) {
delete $http.defaults.headers.common['X-Requested-With'];
this.getData = function() {
var URL = "https://www.quandl.com/api/v1/datasets/CHRIS/ICE_B1.json";
return $http({
method: 'GET',
url: URL
})
}})
.directive('oilGraph', function() {
return {
scope: {},
controller: function(oilService) {
var width = 200;
var height = 100;
var parseTime = d3.timeParse("%y-%m-%d");
var x = d3.scaleTime().range([0, width]);
var y = d3.scaleLinear().range([height, 0]);
var valueline = d3.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.settle); });
var svg = d3.select("#oilgraph").append("svg")
.attr("width", width)
.attr("height", height);
oilService.getData()
.then(function(data) {
d3.json(data, function(error, data) {
if (error) {
console.log(error);
}
data.forEach(function(d) {
d.date = parseTime(d[0]);
d.settle = d[4];
})
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain([0, d3.max(data, function(d) { return d.settle; })]);
svg.append("path")
.data([data])
.attr("class", "line")
.attr("d", valueline);
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
svg.append("g")
.call(d3.axisLeft(y));
})
})
}
}
})
(用事中括弧-混乱)
秒の誤差がある参照する必要があるためdata.forEach(機能(D){ 'で' data' ... 'は最初のエラーのために定義されていません。console.logをここに置くことによって' oilService.getData() 'の結果を記録できますか?' .then(function(data){console.log( "data:"、data ) '' console.log(error);の結果が何であるかを投稿することができますか?(私は最初のエラーだと思っていますが、ちょうどいいです) – mkaran
$ httpおそらく[deserializes](https:// docs .angularjs.org/api/ng/service/$ http#default-transformations)JSONデータ(これはt彼はデフォルトです)、d3.jsonはすでにオブジェクトを取得していますが、文字列ではなく – ccprog
@ccprogが問題の1つですが、ここで理解できないのはlocalhostの最初のエラーの部分です: 'http:// localhost:3000/[object%20Object] 'となります。私はこれがコード内のどこにも構築されておらず、 'd3.json'は' oilService.getData() 'の' data'を入力としているので、何かがあることを意味します.. – mkaran