从json

时间:2017-05-29 10:19:37

标签: javascript d3.js assign

我使用以下代码使用D3从json读取数据并将其传递给另一个函数。

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Simple venn.js example</title>
</head>
<style>
div {
    max-width: 300px;
    height: 400px;
    margin: 0 0 0 0;
    padding: 0 0 0 0;
}
</style>
<body>
    <div id="weighted_example"></div>
</body>

<script type="text/javascript" src="https://code.jquery.com/jquery-1.9.1.js"></script>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="../venn.js"></script>


<script>
    var sets= [{}];
    d3.json( "json", function( data ) 
    {  
       sets=data;        // reading successfully
    });

    alert(sets);    // but i need to use alert to pass the value to function div.datum(sets) otherwise sets value is null.
    var div =d3.select("#weighted_example")
    div.datum(sets).call(venn.VennDiagram())
</script>
</html>

json文件:

[{&#34;设置&#34;:[0],&#34;尺寸&#34;:1958},{&#34;设置&#34;:[1],&#34;尺寸&# 34;:1856},{&#34;设置&#34;:[2],&#34;尺寸&#34;:1297},{&#34;设置&#34;:[0,1],&# 34;尺寸&#34;:220},{&#34;设置&#34;:[2,0],&#34;尺寸&#34;:123},{&#34;设置&#34;:[2 ,1,&#34;尺寸&#34;:139}]

从逻辑上讲,它似乎不切实际。当我在d3.json()函数中使用alert时,它会显示正确的值,因此设置已经分配的值但是如果我不使用集合的警报,为什么会传递空值。我该如何解决这样的错误呢?

1 个答案:

答案 0 :(得分:1)

d3.json是一个异步函数,因此当您到达div.datum行时,无法确定集合是否已就绪。

你看到它使用警报的原因是因为警报会停止你的javascript流,因此设置会有一个值归属。

您应该将您的基准代码放在d3.json代码中。