我正在通過使用JSON數據來驅動一些使用JavaScript D3可視化工具(http://mbostock.github.com/d3/)製作的圖表。我設置我的WCF服務,該代碼jQuery中正常工作:在D3中使用JSON數據Javascript可視化
$('#getDataItems').click(function() {
var $DataList = $('#DataList');
$DataList.empty().appendLi('Loading...');
// Get the JsonP data
$.getJSON('http://localhost:65025/CustomersService.svc/GetMyDataItems?callback=?', null, function (somedata) {
alert('Received ' + somedata.length + ' Items');
$DataList.empty();
$.each(somedata, function() {
$DataList.appendLi(this.ID + " - " + this.Value);
}); // end each dataitem function
}); // end success function
}); // end #getDataItems.click
D3擁有使用JSON數據也是一個函數,但我還沒有取得過成功。它看起來像這樣:
// this works
//var data = [4, 8, 15, 16, 23, 42];
// this doesn't
var data = function() {
d3.json('http://localhost:65025/CustomersService.svc/GetMyDataItems?callback=?',
function (data) } })
}
//.. rest of the example is known working code so its here only for reference
// create the chart class as an append to the body element.
var chart = d3.select("body")
.append("svg:svg")
.attr("class", "chart")
.attr("width", 420)
.attr("height", 20 * data.length);
// Set the width relative to max data value
var x = d3.scale.linear()
.domain([0, d3.max(data)])
.range([0, 420]);
var y = d3.scale.ordinal()
.domain(data)
.rangeBands([0, 120]);
chart.selectAll("rect")
.data(data)
.enter().append("svg:rect")
.attr("y", y)
.attr("width", x)
.attr("height", y.rangeBand());
chart.selectAll("text")
.data(data)
.enter().append("svg:text")
.attr("x", x)
.attr("y", function (d) { return y(d) + y.rangeBand()/2; })
.attr("dx", -3) // padding-right
.attr("dy", ".35em") // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(String);
幾乎所有的代碼都來自D3下載的'條形圖'示例,它工作正常。如果我手動聲明數據(按照上面的整數數組),它可以工作,但不能用JSON命令。我還簡化了返回的數據,所以它只包含整數。但最終,我希望能夠通過'id字段','值字段'等來訪問JSON數據,並在代碼中引用這些數據。
任何人有任何想法,我的語法是否不正確?我意識到函數(數據)是用來將數據添加到圖表中的,但是這個例子中的代碼可以工作,所以我寧願從這一點開始。
嗨!感謝那。如果我要使用jquery版本(在第一個代碼片段中),以'somedata'變量結束 - 我如何將值存入數組,類似於'var data = [1,2,3]?這可能是JSON包含每個「記錄」的兩個字段 - 名稱和值。那麼,如何將JSON值與「數據」的格式相同以完成該圖?對不起,我希望這是有道理的,我正在努力解釋它! :) – Glinkot
如果你的web服務返回類似'[1,2,3]的東西',那麼你應該在'data'變量中有這樣的信息。使用firebug和'console.log(data)'來查看你正在返回的東西。 – rmarimon
從你的jQuery例子中,數據被作爲「ID」和「Value」對檢索。我已經更新了答案,以反映如何從中獲取數據。 – rmarimon