Chrome没有运行我的D3.js,但它在safari中工作正常

时间:2014-07-08 09:24:31

标签: javascript html d3.js

我是D3.js的新手。 Chrome没有运行我的D3.js,但它在safari中工作正常。 这里的代码出了什么问题?请协助

这是由于某些权限问题导致Chrome在从服务器运行文件时不允许使用XMLHttpRequest(d3.json等)。

<!DOCTYPE html>
<meta charset="utf-8">
<style>

.node {
  stroke: #fff;
  stroke-width: 1.5px;
}

.link {
  stroke: #999;
  stroke-opacity: .6;
}

</style>
<body>
Show: <select id="graph">
  <option value="init">Before topic identification</option>
  <option value="final">After topic identification</option>
</select>

<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var width = 960,
    height = 1000;

var color = d3.scale.category20();

var force = d3.layout.force()
    .friction(0.99)
    .charge(-120)
    .linkDistance(100)
    .size([width, height]);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

d3.json("cluster.json", function(error, graph) {
  force
      .nodes(graph.nodes)
      .links(graph.links)
      .start();

  var link = svg.selectAll(".link")
      .data(graph.links)
    .enter().append("line")
      .attr("class", "link")
      .style("stroke-width", 0);

  var gnodes = svg.selectAll("g.gnode")
      .data(graph.nodes)
    .enter()
      .append('g')
      .classed('gnode', true);

  // Add one circle in each group
  var node = gnodes.append("circle")
    .attr("class", "node")
    .attr("r", function(d) { return d.initValue*2; })
    .style("fill", color(0))
    .style("fill-opacity", function(d) { return (d.type=="term") ? 0 : 0.75; })
    .call(force.drag);

  // Append the labels to each group
  var labels = gnodes.append("text")
      .style("opacity", function(d) {return d.initValue*2; })
      .attr("dy", ".3em")
      .style("text-anchor", "middle")
      .style("font-size", function(d) {return 24+"px"; })
      .text(function(d) { return d.name; })
      .on("mouseover", function(d, i) {
        d3.select(this)
        .transition()
        .duration(200)
        .style('font-size', function(d) { return 45 })
        .style("opacity", 1)
        .style('fill', "red");
        d3.select(this).moveToFront();      
        })
    .on("mouseout", function(d, i) {
        d3.select(this)
        .transition()
        .duration(200)
        .style('font-size', function(d) { return 24 })
        .style("opacity", function(d) {return d.initValue*2; })
        .style('fill', "black");
    });

  force.on("tick", function() {
    link.attr("x1", function(d) { return d.source.x; })
        .attr("y1", function(d) { return d.source.y; })
        .attr("x2", function(d) { return d.target.x; })
        .attr("y2", function(d) { return d.target.y; });

    // Translate the groups
    gnodes.attr("transform", function(d) { 
      return 'translate(' + [d.x, d.y] + ')'; 
    });    
  });

  d3.select("#graph").on("change", function() {    
    // Compute index per node.
    var thisValue = this.value;
    node.attr("r", function(d) { return (thisValue=="init") ? d.initValue*2 : ((d.type=="term") ? 50 : d.finalValue*2); });
    node.style("fill", function(d) { return (thisValue=="init") ? color(0) : color(d.group); });
    link.style("stroke-width", function(d) { return (thisValue=="init") ? 0 : 1; });
    force.linkDistance( function(d) { return ((thisValue=="init") ? d.initValue : d.finalValue*20); });
    force.start();
  });
});


</script>

cluster.json

2 个答案:

答案 0 :(得分:0)

有时您无法使用d3.json在Chrome中加载本地文件。但你可以使用jquery.get,如下所示:

$.get( "cluster.json", function( data ) {

//你的代码在这里     });

PS:最好使用$ .Deferred,在你的代码中解析。

但我想,你使用了错误的cluster.json。你能提供吗?

答案 1 :(得分:0)

您需要在某个本地服务器上运行代码..比如

  localhost:8080

如果安装了Wamp或任何php服务器,只需复制通过www根文件夹中的代码并从phpMyAdmin运行

如果你安装了python open命令提示符,请转到该目录并输入

命令
   python -m SimpleHTTPServer 8000

您将能够在该目录上运行本地服务器