首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AJAX更新d3图表的最佳方式是什么?

使用AJAX更新d3图表的最佳方式是什么?
EN

Stack Overflow用户
提问于 2014-04-01 19:14:11
回答 3查看 28.9K关注 0票数 15

我已经学会了几个d3块。在jquery的帮助下,我制作了一个响应式d3直方图。

现在,我想继续使用ajax更新d3图表。

我刚接触到jquery。

并了解一些ajax的工作原理。

我搜索了很长一段时间,但我在d3官方网站或其他任何地方都找不到任何可用的示例。

对于我来说,任何帮助都是有益的,因为我需要了解通过ajax更新d3图表的基本模块。

提前感谢!!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-01 20:29:22

您只需要在ajax成功时调用d3函数:

代码语言:javascript
运行
复制
    $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: 'url to your web servise',
            dataType: 'json',
            async: true,
            data: "{}", 
            success: function (data) {
               var pos_data = data;
               div_name = "div.histogram";

        draw_histogram(div_name, pos_data);

            },
            error: function (result) {



}
    })



//The drawing of the histogram has been broken out from the data retrial 
    // or computation. (In this case the 'Irwin-Hall distribution' computation above)

    function draw_histogram(reference, pos_data){

        $(reference).empty()

        //The drawing code needs to reference a responsive elements dimneions
        var width = $(reference).width();
        // var width = $(reference).empty().width(); we can chain for effeicanecy as jquery returns jquery.

        // var height = 230;  // We don't want the height to be responsive.

        var margin = {top: 10, right: 30, bottom: 40, left: 30},
        // width = 960 - margin.left - margin.right,
        height = 270 - margin.top - margin.bottom;


        var histogram = d3.layout.histogram() (pos_data);
        //var neg_histogram = d3.layout.histogram()(neg_data);

        var x = d3.scale.ordinal()
            .domain(histogram.map(function(d) { return d.x; }))
            .rangeRoundBands([0, width]);

        var xAxis = d3.svg.axis()
        .scale(x)
        .orient("bottom");


        var y = d3.scale.linear()
            .domain([0, d3.max(histogram.map(function(d) { return d.y; }))])
            .range([0, height]);

        //var ny = d3.scale.linear()
        //    .domain([0, d3.max(neg_histogram.map(function(d) { return d.y; }))])
        //    .range([0, height]);

        var svg = d3.select(reference).append("svg")
            .attr("width", width)
            .attr("height", height + 20);



        svg.selectAll("rect")
            .data(histogram)
          .enter().append("rect")
            .attr("width", x.rangeBand())
            .attr("x", function(d) { return x(d.x); })
            .attr("y", function(d) { return height - y(d.y); })
            .attr("height", function(d) { return y(d.y); });


        svg.append("line")
            .attr("x1", 0)
            .attr("x2", width)
            .attr("y1", height)
            .attr("y2", height);

        svg.append("g")
            .attr("class", "x axis")
            .attr("transform", "translate(0," + (height)  + ")")
            .call(xAxis);
    };

    //Bind the window resize to the draw method.
    //A simple bind example is

    //A better idom for binding with resize is to debounce
    var debounce = function(fn, timeout) 
    {
      var timeoutID = -1;
      return function() {
        if (timeoutID > -1) {
          window.clearTimeout(timeoutID);
        }
        timeoutID = window.setTimeout(fn, timeout);
      }
    };

    var debounced_draw = debounce(function() {
      draw_histogram(div_name, pos_data);
    }, 125);

    $(window).resize(debounced_draw);
票数 18
EN

Stack Overflow用户

发布于 2017-01-30 03:35:39

我知道OP指定了jQuery,但对于那些不想要其他框架的谷歌人来说,有一种原生的D3方法可以做到这一点,使用requestjson

代码语言:javascript
运行
复制
d3.request(url, function(error, response) {
    // Now use response to do some d3 magic
});

代码语言:javascript
运行
复制
d3.json(url, function(error, response) {
    // Now use response to do some d3 magic
});
票数 30
EN

Stack Overflow用户

发布于 2014-04-01 19:37:45

任何AJAX请求的思想都是将请求发送到一个页面,该页面将生成可供客户端使用的HTML标记或数据。当您希望通过AJAX更新dropdown时,请确保服务器以XML/JSON或HTML标记的形式发送下拉项列表,并且您的调用者函数将HTML放在适当的位置。

如果您想要实时更新,请考虑定期向服务器请求数据,然后将数据与您的上一份副本进行匹配,看看是否有新数据到达。如果有,请重新渲染。

要了解如何使用AJAX实时动态更新内容,请查看我的

在本地服务器上托管项目。(可以是任何WAMP/LAMP/Tomcat之类的)并打开sample.html

现在,更改datafile.json中的内容。您将立即看到在表格上呈现的更改。

您希望实现相同的功能,但使用的是d3图表。但是我如何获取内容并定期处理它的想法仍然是一样的。

希望这能帮上忙。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22784164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档