将d3.js ajaxrequest中的数据保存在变量中以创建包含数据的轴

时间:2014-11-11 16:30:02

标签: d3.js

我在这里阅读了很多关于如何在变量中保存数据的帖子。为此,我创建了全局变量“arraydates”。它需要在一个数组中用于轴刻度值,它正常工作。但是只有ajax-request中的第一个console.log正在运行。第二个没有给出任何东西。任何线索为什么?是因为Ajaxrequest是异步的吗? 那么什么是更好的解决方案呢? 谢谢你的建议。

var arraydates;

        d3.json("/weather/date.json", function(error, datad) {

        var array = [];
        for(var i in datad)
            array.push( datad[i].date);
            arraydates=array;            

        console.log(arraydates);

        });

的console.log(arraydates);

2 个答案:

答案 0 :(得分:1)

是的 - 这是影响控制台记录内容的ajax请求的异步性质。生活在({1}}处理程序函数之外(和之后)的代码将在启动ajax请求之后但在响应返回之前立即执行。上面列出的The link Lars涵盖了所有这些内容,但其含义是您需要一个全局变量,或者您想要在数据准备好后运行的任何代码都必须存在于d3.json处理函数中。如果你正在寻找一个更简洁的图案,而不是依赖于全局变量,你可以这样设置:

d3.json

答案 1 :(得分:0)

这两个建议对我的情况都很有用,但我还要补充一点,我的代码中有几个ajax请求,有点想清理它而不是嵌套多个请求,但现在它工作正常。 谢谢!