从d3.json()返回数组

Com*_*gle 13 javascript d3.js

作为一个JQUERY/d3-noob,似乎我无法弄清楚如何使这项工作:

  supdog = d3.json(dataPath, function(jsondata){
    return jsondata;
  })
  console.log(supdog);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Ber*_*ema 20

除了你的问题描述非常简洁之外,问题似乎是你对什么回归的假设.

函数d3.json()是一个直接返回的异步函数(我假设一个未定义的值).只有从后端接收数据时,才会调用传递给它的回调函数.显然,这里的上下文不同,你的回调的返回值不会自动成为d3.json的返回值(因为这个已经返回"long").

你想做的可能是这样的:

    var jsondata;
    d3.json(dataPath, function(dataFromServer) {
      jsondata = dataFromServer;
    }
    console.log(jsondata);
Run Code Online (Sandbox Code Playgroud)

更新1: 显然,上面的例子仍然不完全正确.在返回d3.json()之后直接调用console.log().因此,服务器可能尚未完全发送回复.因此,您只能在返回回调时访问数据.固定示例:

    var jsondata;

    function doSomethingWithData() {
      console.log(jsondata);
    }

    d3.json(dataPath, function(dataFromServer) {
      jsondata = dataFromServer;
      doSomethingWithData();
    })
Run Code Online (Sandbox Code Playgroud)

对于(有点愚蠢但是)工作示例,请参阅:http://jsfiddle.net/GhpBt/10/

更新2: 上面的示例演示了代码执行的顺序,但并不值得为大多数漂亮的代码付出代价.我自己不会使用这个"全局"变量并简化上面的例子:

    function doSomethingWithData(jsondata) {
      console.log(jsondata);
    }

    d3.json(dataPath, doSomethingWithData);
Run Code Online (Sandbox Code Playgroud)

注意doSomethingWithData如何直接传递给d3.json而不是在匿名内部函数中单独调用它.

注意:这不是d3.js的特殊问题.基本上,所有异步的javascript函数都可能以类似的方式运行.如果它们返回某些内容,则它不会是传递的回调的返回值.