来自本地计算机的数据

Data from local computer

本文关键字:数据 计算机      更新时间:2023-09-26

我想从计算机上的JSON文件加载数据。我知道没有HTTP服务器我就无法阅读,所以我想创建一个输入字段。我的文件被成功读取,但当我将数据发送到函数以创建气泡图时,什么都没有创建。如果我从本地加载,它就可以工作(我执行HTTP服务器)。这是代码:

<script type="text/javascript">
    var json;
    function handleFileSelect(evt) {
        var files = evt.target.files;
    }
    document.getElementById('files').addEventListener('change', handleFileSelect, false);
    function handleFileSelect(evt) {
        var files = evt.target.files;
        var output = [];
        for (var i = 0, f; f = files[i]; i++) {
            var reader = new FileReader();
            reader.onload = (function (theFile) {
                return function (e) {
                        json = JSON.parse(e.target.result);
                        alert('json global var has been set to parsed json of this file here it is unevaled = 'n' + JSON.stringify(json));
                        initData(JSON.stringify(json)); // Doesn't works
                        //initData("data.json"); // Works
                }
            })(f);
            reader.readAsText(f);
        }
    }
    document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

 function initData(data){
          d3.json(data, function(error, root) {
        if (error) throw error;
        var node = svg.selectAll(".node")
                .data(bubble.nodes(classes(root))
// .....

这是Plunker的在线示例:https://plnkr.co/edit/T8WFvj0qtMW5mFK6gOjO?p=preview

谢谢。

d3.json为其第一个参数使用文件路径,并将解析后的json传递给其回调。由于您自己加载和解析json,因此不需要使用d3.json,只需将json作为root直接传递给回调即可。

这应该起作用:https://plnkr.co/edit/0H6t9m642cxCcukPwDFH?p=preview

如果您还想通过d3.json加载服务器提供的内容,您可以使用以下方法来完成:

var loadFromUrl = function(url){
    d3.json(url, function(error, data){
        if(!error) {
           initData(data);
        }
    });
};

感谢您的回答!这是一个很好的代码,只需发送JSON,而不使用d3.JSON

<script type="text/javascript">
    var json;
    function handleFileSelect(evt) {
        var files = evt.target.files;
    }
    document.getElementById('files').addEventListener('change', handleFileSelect, false);
    function handleFileSelect(evt) {
        var files = evt.target.files;
        var output = [];
        for (var i = 0, f; f = files[i]; i++) {
            var reader = new FileReader();
            reader.onload = (function (theFile) {
                return function (e) {
                        json = JSON.parse(e.target.result);
                        alert('json global var has been set to parsed json of this file here it is unevaled = 'n' + JSON.stringify(json));
                        initData(json); // Doesn't works
                        //initData("data.json"); // Works
                }
            })(f);
            reader.readAsText(f);
        }
    }
    document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
function initData(root){
        var node = svg.selectAll(".node")
                .data(bubble.nodes(classes(root))
//....