Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I am generating a JSON "text" using php and want to include that in a javascript in the same file. I think I am having problem understanding how java deals with JSON as text vs as an Object.

Note: I am going to change mysql to mysqli soon, just want to get this thing working first. Here's my script:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Knox QA tickets status</title>
</head>
<body>
  <script src="am/amcharts/amcharts.js" type="text/javascript"></script>
  <script src="am/amcharts/serial.js" type="text/javascript"></script> 

<?php
    //$subm = "8";
    // This is being loaded from a selection html script 
    $subm =  $_POST["submoduleID"];
    if(!isset($_POST["submoduleID"]) )
    {
    // set it to the default container if it's not set.
     $subm = "8";
    }

    // Connect to MySQL
    $link = mysql_connect( 'localhost', 'root', 'secret' );
    if ( !$link ) {
      die( 'Could not connect: ' . mysql_error() );
    }

    // Select the data base
    $db = mysql_select_db( 'xqa_status', $link );
    if ( !$db ) {
      die ( 'Error selecting database \'test\' : ' . mysql_error() );
    }

    // Fetch the data
    $query = ("select date, tested, passed from test_status where xqa_id=" . $subm . " order by test_status_id limit 10");

    $result = mysql_query( $query );

    // Make a josn formatted output 
    $rows = array();
    while ( $r = mysql_fetch_assoc($result)) {
      $rows[] = $r;
    }
    $chartData_json = json_encode($rows);
    print $chartData_json;
    mysql_close($link);
?>


<!-- Custom Function  
  <script>
    AmCharts.loadJSON = function(file) {
      // create the request
      if (window.XMLHttpRequest) {
        // IE7+, Firefox, Chrome, Opera, Safari
        var request = new XMLHttpRequest();
      } else {
        // code for IE6, IE5
        var request = new ActiveXObject('Microsoft.XMLHTTP');
      }

      request.open('GET', file, false);
      request.send();

      // parse adn return the output
      return eval(request.responseText);
    };
  </script> -->


<!-- chart container -->
<div id="chartdiv" style="width: 600px; height: 300px;"></div>


<!-- the chart code -->
  <script>
    var chart;
    var chartData1 = "<?php echo $chartData_json; ?>";
    var myObject = JSON.parse(chartData1, reviver);
    // create chart
    AmCharts.ready(function() {

      // load the data
      // SERIAL CHART
      chart = new AmCharts.AmSerialChart();
      chart.pathToImages = "am/amcharts/images/";
      chart.dataProvider = myObject;
      chart.categoryField = "date";
      chart.dataDateFormat = "YYYY-MM-DD";

      // GRAPHS

      var graph1 = new AmCharts.AmGraph(); 
      graph1.type = "smoothedLine";
      graph1.title = "Tested";
      graph1.valueField = "tested";
      graph1.bullet = "round";
      graph1.bulletSize = 5;
      graph1.bulletBorderColor = "#FFFFFF";
      graph1.bulletBorderThickness = 2;
      graph1.lineThickness = 2;
      graph1.lineAlpha = 0.5;
      chart.addGraph(graph1);

      var graph2 = new AmCharts.AmGraph();
      graph2.type = "smoothedLine";
      graph2.title = "Passed";
      graph2.valueField = "passed";
      graph2.bullet = "round";
      graph2.bulletSize = 5;
      graph2.bulletBorderColor = "#FFFFFF";
      graph2.bulletBorderThickness = 2;
      graph2.lineThickness = 2;
      graph2.lineAlpha = 0.5;
      chart.addGraph(graph2);

      // CATEGORY AXIS
      chart.categoryAxis.parseDates = true;
      chart.categoryAxis.autoGridCount = false;
      chart.categoryAxis.gridCout = chartData.length;
      chart.categoryAxis.gridPosition = "start";
      chart.categoryAxis.labelRotation = 90;

      // LEGEND
      var legend = new AmCharts.AmLegend();
      chart.addLegend(legend);

       // CURSOR
       var chartCursor = new AmCharts.ChartCursor();
       chartCursor.cursorAlpha = 0;
       chartCursor.cursorPosition = "mouse";
       chartCursor.categoryBalloonDateFormat = "YYYY-MM-DD";
       chart.addChartCursor(chartCursor);

       // SCROLLBAR
       var chartScrollbar = new AmCharts.ChartScrollbar();
       chart.addChartScrollbar(chartScrollbar);

       // 3D
       // chart.angle = 30;
       // chart.depth3D = 15;



       // WRITE
       chart.write("chartdiv");



    });

  </script>

</body>
</html>

A sample of the json output is this:

[{"date":"2014-01-09","tested":"12","passed":"32"},{"date":"2014-01-10","tested":"12","passed":"34"},{"date":"2014-01-11","tested":"22","passed":"34"},{"date":"2014-01-12","tested":"22","passed":"34"},{"date":"2014-01-13","tested":"40","passed":"34"},{"date":"2014-01-14","tested":"40","passed":"34"},{"date":"2014-01-15","tested":"40","passed":"34"}]
share|improve this question
1  
not very clear.. what is your exact problem? –  meda Jan 27 at 21:11
    
mixing javascript and php in one file, oh my –  tenub Jan 27 at 21:16
1  
Thanks Patrick, That did fix my problem, Javascript failed to understand the JSON as an object because it was inside "double quotes". –  user3239109 Jan 27 at 21:19

1 Answer 1

up vote 1 down vote accepted

You need to assign the output of your PHP into a Javascript variable:

<script>
  var json_data=<?php

...

?>;

  // Do stuff with json_data
</script>

Then json_data will be an array or objects in Javascript (it's not JSON anymore since the JSON will be parsed as an array literal, not a string). That is most likely what you want, since then you can work with the array, like json_data[0].data.

share|improve this answer
    
don't forget to add quotes around your json. better write something like: var json_data="<?php print $sJSON; ?>"; –  mat Jan 27 at 21:15
3  
@mat, no that would cause errors as json contains quotes in itself, so when javascript loads it it would see sometihng like "{"somevar":"somevalue"}" and error out. The way Paulpro has it, the json string will be treated as an object literal. –  Patrick Evans Jan 27 at 21:20
    
But I do have the variable here: var chartData1 = "<?php echo $chartData_json; ?>"; The double quotes actually was the problem. –  user3239109 Jan 27 at 21:21
2  
just use json_encode and json_decode to print json ... it works like a charm with arrays and handles escaping quotes etc... –  Umingo Jan 27 at 21:21

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.