يُرجع $.getJSON [كائن الكائن]
سؤال
All- أنا أستخدم مثال Treemap لـ D3 لمحاولة تحديثه ديناميكيًا كل 30 ثانية عبر $ .getjson.ذهبت إلى http://jsonlint.com/ للتأكد من التحقق من صحة json الخاص بي.أبدأ TreeMap بسلسلة json محلية تعمل على إنشاء TreeMap على الفور.ومع ذلك، لا يمكنني معرفة السبب الذي يجعلني أحصل على ما يلي عندما أقوم بتحديث المخطط الهيكلي بعد 30 ثانية عبر المضيف المحلي:[كائن كائن]،[كائن كائن]،[كائن كائن]،[كائن كائن]،[كائن كائن]،[كائن كائن] من سلسلة json الخاصة بي بدلاً من السلسلة النصية المحدثة حديثًا.كيف يمكنني تغيير [كائن الكائن] إلى الرموز الفعلية التي يمكنها إعادة ملء جدول جديد ورسمه؟شكرا جزيلا مقدما لإلقاء نظرة.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Update Tree Map</title>
<link rel="Stylesheet" type="text/css" href="http://localhost:8080/dev_tests/d3/examples/treemap/treemap-svg.css" />
<script type="text/javascript" src="http://localhost:8080/dev_tests/d3/d3.js"></script>
<script type="text/javascript" src="http://localhost:8080/dev_tests/d3/d3.layout.js"></script>
<script type="text/javascript" src="http://localhost:8080/dev_tests/latest.jquery/jquery-latest.js"></script>
</head>
<body>
<div id="chart">
<script type='text/javascript'>
var jdata = {
"children": [
{
"name": "quant_mechanics",
"size": "1243"
},
{
"name": "graph_theory",
"size": "4343"
},
{
"name": "algebra",
"size": "1936"
},
{
"name": "calc",
"size": "3936"
},
{
"name": "geom",
"size": "2136"
},
{
"name": "stats",
"size": "4136"
}
]
};
var w = 350,
h = 200,
color = d3.scale.category20c();
var treemap = d3.layout.treemap()
.padding(4)
.size([w, h])
.value(function(d) { return d.size; });
var svg = d3.select("#chart").append("svg")
.style("position", "relative")
.style("width", w + "px")
.style("height", h + "px");
redraw3();
function redraw3() {
var cell = svg.data([jdata]).selectAll("g")
.data(treemap)
.enter().append("g")
.attr("class", "cell")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
cell.append("rect")
.attr("width", function(d) { return d.dx; })
.attr("height", function(d) { return d.dy; })
.style("fill", function(d) { return d.children ? color(d.data.name) : null; });
cell.append("text")
.attr("x", function(d) { return d.dx / 2; })
.attr("y", function(d) { return d.dy / 2; })
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.text(function(d) { return d.children ? null : d.data.name; });
}
var interval = setInterval(function() {
$.getJSON("http://localhost:8080/dev_tests/d3/examples/data/flare2.json", function(json) {
alert(json.children);
jdata.push({value: json.children});
redraw3();
});
}, 30000);
</script>
</div>
</body>
</html>
المحلول
الرمز الحالي الخاص بك يحاول استخدامه push()
على ال jdata
كائن، وهو ليس مصفوفة.
أعتقد أنك تريد ذلك push
الجديد json.children
الكائنات في jdata.children
مصفوفة (لم يتم اختبارها)
jdata.children.push(json.children)