2017-11-15 10 views
1

私は多くの時間を尋ねられていますが、それについてたくさんのスレッドを読んでいますが、単純なことではなく、PHPからJavaスクリプトへjsonデータのpbjectを渡す方法がわかります。phpからjavascriptにjasonデータオブジェクトを渡します

データベースから2つの1次元jsonデータオブジェクト配列(?)を取得し、2つのdinemsional jsonデータオブジェクト配列にマージしてさらに処理するためにsigma.jsにさらに渡します。

<?php 
require 'sort.php'; 
$db = db(); 
$rawNodes = $db->select('node', '*', ['ico_id' => $_GET['id']]); 
$rawEdges = $db->select("edge", "*", ["ico_id" => $_GET['id']]); 

$nodes = array(); 
foreach ($rawNodes as $node) { 
    array_push($out, $node); 
} 

$edges = array(); 
foreach ($rawEdges as $edge) { 
    array_push($out, $edge); 
} 

?> 

は今、Javaスクリプトでそれをアクセス:

<html> 
    <head> 
     <title>Dynamic Transaction Visualization </title> 
     <style type="text/css"> 
      #container { 
       max-width: 1200px; 
       height: 800px; 
       margin: auto; 
      } 
     </style> 
     <script src="build/sigma.min.js"></script> 
     <script src="build/plugins/sigma.parsers.json.min.js"></script> 
     <script src="build/plugins/sigma.renderers.edgeLabels.min.js"></script> 
     <script> 
      function getData() { 
       var gnodes = <?php echo json_encode($nodes); ?>; 
       var gedges = <?php echo json_encode($edges); ?>; 

       alert(gnodes[0].adress); // <- Doesnt work? Why? 

       var g = {nodes: [], edges: []}; //<- i think this sytanx is correct for making a 2 dim json data object array- is it? 

       var xpos = 0; 
       var ypos = 0; 

       var n; 

       for (n in gnodes) { //<- Does not iterate through any Elements 
        alert(gnodes[n].adress); //<- Doest work either? Why? 
        xpos = n.block_number - 4400000; 
        ypos += 100; 
        if (ypos > 10000) { ypos = 0 } 
        g.nodes.push(
         { 
          "id": n.adress, 
          "label": n.adress, 
          "size": 1, //n.size, 
          "x": xpos, 
          "y": ypos 
         } 
        ) 
       } 

       var edgecount = 0; 

       var m; 
       for (m in gedges) { 
        g.edges.push(
         { 
          "id": edgecount++, 
          "source": m.node_adress1, 
          "target": m.node_adress2, 
          "label": m.erc20_value, 
          "type": "arrow" 
         } 
        ) 
       } 
       //g.nodes = gnodes; geht nicht benennung nicht passend 
       //g.edges = gedges; 

       return g; 
      } 

      function dispGraph() { 
       var gdata = getData(); 
       s = new sigma({ 
        graph: gdata, 
        container: 'container', 
        renderer: { 
         container: "container", 
         type: "canvas" 
        }, 
        settings: { 
         edgeLabelSize: 'fixed', 
         nodeLabelSize: 'fixed', 
         defaultNodeColor: '#ec5148', 
         maxNodeSize: 15, 
         minNodeSize: 5, 
         minEdgeSize: 4, 
         maxEdgeSize: 4, 
         minArrowSize: 4, 
         //edgeLabelSize: 'fixed', 
         // {string} The opposite power ratio between the font size of the label and 
         // the edge size: 
         // Math.pow(size, -1/edgeLabelSizePowRatio) * size * defaultEdgeLabelSize 
         edgeLabelSizePowRatio: 1, 
         // {number} The minimum size an edge must have to see its label displayed. 
         edgeLabelThreshold: 1, 
        } 
       }); 
      } 
     </script> 
    </head> 
    <body> 
    <div id="container"></div> 
     <script>dispGraph()</script> 
    </body> 
</html> 
+0

「echo」のようなものをDOMに出力するだけで済みます。必要に応じて出力を隠すことができますが、出力する必要があります。 –

+0

'console.log(gnodes [0])'とは何ですか?列名が 'adress'ですか?これは 'address'の入力ミスのようです。 – Barmar

+0

console.log(gnodes [0])は "undefined graph.php:23:17"を返します –

答えて

1

私はそれが簡単だと思いデータベースからデータを読み取る

。 (.phpの拡張子を持つ)HTMLファイルに:

<?php $json = json_encode($data); ?> 
<script> 
    var json = <?=$json?>; 
</script> 
+0

私にとってはうまくいかないようです:/。私は何が間違っていますか? –

+0

チェック:http://sandbox.onlinephpfunctions.com/code/0cd5dd7ea2e4d7efb0e1be3fbd27203ae05f466d – paulz

+0

'$ out'を' array_push() 'の' $ nodes'に変更しました – paulz

0

ポール鄭は、以下のcorrecttion

1)

Change $out to $nodes in array_push() 

2)

<?php $json = json_encode($data); ?> 
<script> 
    var json = <?=$json?>; 
</script> 

おかげでみんなで私を助けましたあなたの貢献のために!

関連する問題