2017-01-30 4 views
-2

я пытался добавить вывод PHP в HTML для d3.for целей тестирования я попытался с простым кодомдобавление внешнего файла d3

index.html

 <!DOCTYPE html> 
    <html> 

<head> 
    <title>including php in javascript</title> 
    <? 
include ('index.php'); 
    ?> 
    </head> 

    <body> 
<script> 
    var myJSON = <?php echo json_encode($json); ?>; 
    document.write(myJSON); 
</script> 
</body> 
    </html> 

другой метод, чтобы добавить внешний файл d3

  <!DOCTYPE html> 
     <html> 

     <head> 
     <title>Radial Cluster Demo</title> 
    <script src="ddd.js"></script> 

     <style> 
     .node { 
    cursor: pointer; 
     } 
    .overlay { 
    background-color:white; 
     } 
     .node circle { 
fill: #fff; 
stroke: steelblue; 
    stroke-width: 1.5px; 
      } 
     .node text { 
font: sans-serif; 

text-align: center; 
    } 
     .link { 
    fill: none; 
     } 
     .parent{ 
     fill :red; 
    font-weight:bolder 
     } 
     div#tooltip { 
position: absolute;   
    font: 15px sans-serif;   
background: orange; 
    border-radius: 8px; 
    padding-left: 5px; 
    padding-right: 5px; 
    pointer-events: none;   
    } 

    </style> 
     </head> 

     <body> 

    <div id="tooltip" style="display:none"></div> 
    <div id="tree-container"class="full"></div> 
    <script type="text/javascript"> 
d3.json("http://localhost:8888/new/new.json",function(treeData){ 


    var selectedNode = null; 
    var draggingNode = null; 

    var panSpeed = 200; 
    var panBoundary = 0; 

    var i = 0; 
    var duration = 750; 
    var root; 

    var width = 5000; 
    var height = 5000; 

    var diameter = 750; 

var tree = d3.layout.tree().size([360, diameter/2 - 120]) 

    .separation(function (a, b) { 
    return (a.parent == b.parent ? 1 : 5)/a.depth; 
     }); 

    var diagonal = d3.svg.diagonal.radial() 

     .projection(function (d) { 
     return [d.y, d.x/180 * Math.PI]; 
     }); 

    root = treeData; 
    root.x0 = height/2; 
     root.y0 = 0; 

    function sortTree() { 
tree.sort(function (a, b) { 
    return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1; 
     }); 
    } 
     sortTree(); 
    var baseSvg = d3.select("#tree-container").append("svg") 
.attr("width", width) 
.attr("height", height) 
    .attr("class", "overlay") 

      .attr("transform", "translate(" + 1000 + "," + 1000 + ")"); 
    function collapse(d) { 

    if (d.children) { 
    d._children = d.children; 
    d._children.forEach(collapse); 
    d.children = null; 
     } 

    update(d); 
     } 

function expand(d) { 

if (d._children) { 
    d.children = d._children; 
    d.children.forEach(expand); 
    d._children = null; 
    } 
     } 
    function toggleChildren(d) { 

    if (d.children) { 
    d._children = d.children; 
    d.children = null; 
    } else if (d._children) { 
    d.children = d._children; 
    d._children = null; 
     } 
    return d; 
     } 

    function click(d) { 
     if(!d.parent){ 
    return; 
     } 

     if (!d.children) 
treeData.children.forEach(collapse); 

if (d3.event.defaultPrevented) return; 

d = toggleChildren(d); 

    update(d); 


     } 

    function update(source) { 

var levelWidth = [1]; 
var childCount = function (level, n) { 
    if (n.children && n.children.length > 0) { 
     if (levelWidth.length <= level + 1) levelWidth.push(0); 

     levelWidth[level + 1] += n.children.length; 
     n.children.forEach(function (d) { 
      childCount(level + 1, d); 
     }); 
    } 
     }; 
     childCount(0, root); 
var nodes = tree.nodes(root); 
links = tree.links(nodes); 
node = svgGroup.selectAll("g.node") 
    .data(nodes, function (d) { 
    return d.id || (d.id = ++i); 
     }); 




var nodeEnter = node.enter().append("g") 

    .attr("class", "node") 

     .on('click', click) 

    nodeEnter.append("circle") 
    .attr("class", "smallcircle") 
     .style("stroke", function(d) { 
    return d.color; 
     }) 


    nodeEnter.append("text") 

    .text(function (d) { 
    return d.name; 
}) 
// .style("font", "12px serif") 
    .style("opacity", 1) 
    .style("fill-opacity", 0) 

    .on("mouseover", function (d) { 
     var r = d3.select(this).node().getBoundingClientRect(); 
     d3.select("div#tooltip") 
      .style("display", "inline") 
      .style("top", (r.top-25) + "px") 
      .style("top", 10 + "px") 
     .style("left", (d3.event.pageX) + "px")  
      .style("top", (d3.event.pageY - 40) + "px") 
      .style("left", r.left + 40+"px") 
      .style("left", + "px") 
      .style("position", "absolute") 
      .text(d.t); 
    }) 
.on("mouseout", function(){ 
    d3.select("div#tooltip").style("display", "none") 
    }) 


node.select("circle.nodeCircle") 
    .attr("r", 4.5) 
    .style("fill", function (d) { 
    return d._children ? "red" : "#fff"; 
}); 


         //  }); 
    var nodeUpdate = node.transition() 
    .duration(duration) 
    .attr("transform", function (d) { 
    return "rotate(" + (d.x - 90) + ")translate 
     (" + d.y + ")rotate(" + (-d.x + 90) + ")"; 
     }); 

    nodeUpdate.select("circle") 
    .attr("r", 4.5) 

    .style("fill", function (d) { 
    return d._children ? "lightsteelblue" : "#fff"; 
    }); 

    nodeUpdate.select("text") 
    // .style("font-size", "13px") 
    .style("fill-opacity", 2) 
     .attr("fill",function(d){return (d.children?"red":"black");}) 
    .attr("dy", ".35em") 

    .attr("text-anchor", function (d) { 
    return d.x < 180 ? "start" : "end"; 
     }) 


    .attr("transform", function (d) { 
    return d.x < 180 ? "translate(8)" : "rotate(360)translate(-8)"; 
     }); 

     var nodeExit = node.exit().transition() 
    .duration(duration) 
    .attr("transform", function (d) { 
    return "translate(" + source.x + "," + source.y + ")"; 
     }) 
    .remove(); 

    nodeExit.select("circle") 
    .attr("r", 0); 

    nodeExit.select("text") 
    .style("fill-opacity", 0); 


     var link = svgGroup.selectAll("path.link") 
    .data(links, function (d) { 
    return d.target.id; 
     }) 
    link.style("stroke", function(d) { 
    return d.color; 
}) 

link.enter().insert("path", "g") 
    .attr("class", "link") 
    link.style("stroke", function(d) { 
    return d.target.color; 
     }) 
    .attr("d", function (d) { 
    var o = { 
     x: source.x0, 
     y: source.y0 
    }; 
    return diagonal({ 
     source: o, 
     target: o 
    }); 
    }); 


    link.transition() 
    .duration(duration) 
    .attr("d", diagonal); 


    link.exit().transition() 
    .duration(duration) 
    .attr("d", function (d) { 
    var o = { 
     x: source.x, 
     y: source.y 
    }; 
    return diagonal({ 
     source: o, 
     target: o 
    }); 
     }) 
    .remove(); 


    nodes.forEach(function (d) { 
    d.x0 = d.x; 
    d.y0 = d.y; 
     }); 
     } 

     var svgGroup = baseSvg.append("g") 
    .attr("transform", "translate(" + 550 + "," + 300 + ")") 


     d3.selectAll("text").style("fill", function (d) 
    { return    d3.select(this).classed(d.cond, true); }) 


     root.children.forEach(function (child) { 
     collapse(child); 
     }); 

     update(root); 
    d3.select(self.frameElement).style("height", width); 
     }); 
     </script> 
     </body> 

     </html> 

в этом методе я получаю

 Uncaught TypeError: Cannot read property 'forEach' of undefined 

где это неправильно?

выход index.php

[ 
    { 
    "id":"1", 
    "name":"parent", 
    "parent":"0", 
    "children":[ 
    { 
     "id":"2", 
     "name":"c1", 
     "parent":"1", 
     "children":[ 
      { 
       "id":"3", 
       "name":"c11", 
       "parent":"2", 
       "children":[ 

       ] 
      }, 
      { 
       "id":"4", 
       "name":"c12", 
       "parent":"2", 
       "children":[ 

       ] 
      } 
     ] 
    }, 
    { 
     "id":"5", 
     "name":"c2", 
     "parent":"1", 
     "children":[ 
      { 
       "id":"6", 
       "name":"c21", 
       "parent":"5", 
       "children":[ 

       ] 
      }, 
      { 
       "id":"7", 
       "name":"c22", 
       "parent":"5", 
       "children":[ 

       ] 
      } 
     ] 
    }, 
    { 
     "id":"8", 
     "name":"c3", 
     "parent":"1", 
     "children":[ 

     ] 
    } 
    ] 
} 
] 
+3

Вы не можете добавить/включить любой php-файл в .html-файле – KinjalMistry

+0

, то как мне добавить php-результат в переменную javascript для d3 – programmer

+0

кажется, что вы не 'echo' (отображаете) ваш json, который не отображает действительные данные json в ваш запрос ajax. – Beginner

ответ

0

Try addding

header('Content-Type: application/json'); 

перед тем

$json= json_encode($nestedArray); 
echo $json; 

Чтобы указать, что вы возвращаете данные формат, JSON

+0

спасибо за ваш ответ ..и пытались .. пустую страницу..и без ошибок в консоли – programmer

Смежные вопросы