单击 ajax 时更新现有的 D3 图

Update the existing D3 graph when clicking on ajax

点击更新 D3 图 我试图在用户单击按钮时更新我的​​图表,而不是每次都创建一个新图表。 目前,我有一个 ajax 函数来从数据库中获取数据。如:

 $("#things").click(function(){
     $.ajax({
        type: "GET",
        url: some url,
        success: function(data) {
            graph(data);
        }
    })
});

如果用户点击#things 上的另一个元素,我希望更改反映在现有图表上。 这是我的图形函数

svg.selectAll(".dot")
    .data(data)
    .enter()
    .append("circle")
    .attr("class", "dot")
    .attr("cx", function(d) {return x(d.x);})
    .attr("cy", function(d) {return y(d.y);})
    .exit().remove()

这家伙解释得很好: http://bl.ocks.org/d3noob/7030f35b72de721622b8

尝试将图表及其数据保存到可用于更新的对象中。

使您的图形函数 return 成为具有更新所需的所有属性的对象。

创建几个函数:

// creates a graph from scratch
//@param {array} graph_data
//@return {object} graph 
function graph(graph_data, graph_object){}

// updates the data in a graph and then re-renders it
//@param {array} grap_data
//@param {object} graph_object
function updateGraph (graph_data, graph_object){}

经过一些研究,我可以从 d3 中删除 svg 元素来清除图形。

d3.select("svg").remove();

svg.selectAll("*").remove();