use*_*628 5 html javascript html5 websocket d3.js
我想知道我是否可以将D3库与我的服务器通过websockets发送的实时数据一起使用.我看不到任何证明这一点的文档或示例.我最初的期望是通过以下代码示例来实现:
ws = new WebSocket(ws://localhost:8888/ma");
some more code....
ws.onmessage = function(evt) {
d3.json("evt.data", function(json) {
......
.......More code.....
......
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,但我知道客户端通过检查控制台日志来接收数据.
此外,还有一个递归函数可以展平JSON文档:
// Returns a flattened hierarchy containing all leaf nodes under the root.
function classes(root) {
var classes = [];
function recurse(name, node) {
if (node.children) node.children.forEach(function(child) { recurse(node.name, child); });
else classes.push({packageName: name, className: node.name, value: node.size});
}
recurse(null, root);
return {children: classes};
}
console.log(evt.data);
};
ws.onclose = function (evt) {
alert("Connection terminated")};
});
});
Run Code Online (Sandbox Code Playgroud)
如果我的JSON文档已经是平的那么我认为它不是必需的,即:
{ID: 1, Name: 'my name', age: 65, car: 'Ford'}
Run Code Online (Sandbox Code Playgroud)
D3对我来说是全新的,所以请帮助我们.
谢谢
我还没有使用带有D3的websockets(但是)看起来你期望d3.json成为一个JSON解析器.它不是 - 它是一个委托JSON.parse解析的AJAX加载器.所以你可能想要这样的东西:
var ws = new WebSocket("ws://localhost:8888/ma");
var data = [];
ws.onmessage = function(evt) {
// append new data from the socket
data.push(JSON.parse(evt.data));
update();
};
// now use the standard join pattern to deal with updates
function update() {
var chunk = d3.selectAll('p')
.data(data);
// entry might be all you need, if you're always appending
chunk.enter().append('p')
.text(function(d) { return d; });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |