【问题标题】:Loading D3 from a local variable从局部变量加载 D3
【发布时间】:2018-05-25 08:20:28
【问题描述】:

嗨,我有这个变量 myJSON,我想在我的 d3 力图中使用它,这是变量的输出。我想知道是否有任何方法可以使用变量来填充我的图表。

var myJSON;

$.ajax({
type: "POST",
url: "http://localhost/web/search.php",
async: false,
data: {
    "dataA": string2
},
cache: false,
success: function(data) {
    myJSON = JSON.parse(data);
},
});

只需将变量放入图形代码中,但它一直给我这个错误uncaught exception: [object ProgressEvent] 有人知道为什么这不起作用吗?任何建议将不胜感激。

d3.json("myJSON", function(error, graph) { if (error) throw error;

【问题讨论】:

  • 你能发布你剩下的 d3js 代码吗?我相信它应该读为d3.json("http://localhost/web/search.php", function(error, data) { console.log(data); // this is your data }); 你不应该首先需要ajax。 D3 将为您加载它。
  • @Lex 我将数据从前端传递到后端“localhost/web/search.php”以从 sql 查询中获取结果,这就是我使用 ajax 的原因。
  • @Lex 我唯一的问题是无法用我的变量“myJSON”填充图表
  • 是的,有服务器端的帮助很好。但是你有更多的 D3 代码吗? D3 将为您处理 ajax。
  • @Lex 这是我使用的确切代码,我只想用我的变量 bl.ocks.org/GerardoFurtado/30220ae7281145b32c9e2bf090a5ae1a/… 填充它

标签: javascript json d3.js


【解决方案1】:

'd3.json' 函数从文件或 url 加载数据。要使用本地 json 变量,只需进行一些更改。

比如你有一个d3网站的demo,文件“data.json”中的数据是

{
  "nodes": [
    {"id": "Myriel", "group": 1},
    {"id": "Napoleon", "group": 1},
    {"id": "Mlle.Baptistine", "group": 1}
   ],
    "links": [
      {"source": "Napoleon", "target": "Myriel", "value": 1}
    ]
}

演示是这样的

d3.json("data.json", function(error, data){
    if(error) throw error;
    console.log(data);

    //some code...
});

这意味着从一个名为“data.json”的文件中加载数据。

现在如果你已经有了 json 变量数据

var data = {
  "nodes": [
    {"id": "Myriel", "group": 1},
    {"id": "Napoleon", "group": 1},
    {"id": "Mlle.Baptistine", "group": 1}
   ],
    "links": [
      {"source": "Napoleon", "target": "Myriel", "value": 1}
    ]
};

随便用吧,把代码改成:

console.log(data);
//some code...

建议:

您可以从 url 加载数据,就像评论所说的那样。使用 AJAX 从 url 加载数据,并将其解析为 d3 代码只需 d3 即可完成。 d3 将从 url 获取数据。

d3.json("http://localhost/web/search.php", function(error, data){
    if(error) throw error;
    console.log(data);

    //some code...
});

【讨论】:

    【解决方案2】:

    如 cmets 中所述。 D3 将为您处理 AJAX。如果您加载示例并查看 chrome 中的网络选项卡。可以看到miserables.json正在加载中。

    这段代码实际上是在为你创建一个 AJAX GET 请求。

    d3.json("miserables.json", function(error, graph) {
      if (error) throw error;
      ...
    

    你可以试试d3.json("http://localhost/web/search.php?dataA=string2", ... 或者可以选择自己加载。并用您的 JSON 替换 graph.nodes

    .selectAll("circle")
        .data(graph.nodes)
    

    【讨论】:

    • 如何替换graph.nodes?用我的变量“myJSON”?
    • .data(graph.nodes) 替换为.data(myJSON)。在初始化 D3 之前,您需要确保您的变量已加载。不过,这开始偏离您的问题。
    • 因为我只想将“myJSON”javascript 对象加载到我的图表中,所以 ajax 只是帮助我从数据库中检索我需要的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2019-07-24
    • 2017-11-08
    • 1970-01-01
    相关资源
    最近更新 更多