Ошибка Google Chart и Uncaught: неверная строка JSON:

1

В моем Demo.php у меня есть визуализация диаграммы google, как указано ниже:

<!--Load the AJAX API-->
        <script type="text/javascript" src="https://www.google.com/jsapi"></script>
        <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {

      var jsonPieChartData = $.ajax({
      url: "getVehicleData.php",
      dataType:"json",
      async: false
    }).responseText;

    // Create our data table out of JSON data loaded from server.
    var piechartdata = new google.visualization.DataTable(jsonPieChartData);

        var options = {
          title: 'Vehicles Currently in Stock'
        };

        var chart = new google.visualization.PieChart(document.getElementById('piechart'));

        chart.draw(piechartdata, options);
      }
    </script>

У меня есть скрипт getVehicleData, написанный, как указано ниже, и я подтвердил JSON на http://jsonlint.com/, однако я все еще получаю ошибку в Google Chrome.

 $sql_qry = "SELECT 'make', COUNT(*) as total FROM 'vehicle' GROUP BY 'make' ORDER BY COUNT(*) DESC";
            $data = perform_query($db, $sql_qry);
        echo '{
    "cols": [
        {
            "id": "",
            "label": "Make",
            "pattern": "",
            "type": "string"
        },
        {
            "id": "",
            "label": "TotalNumber",
            "pattern": "",
            "type": "number"
        }
    ],
    "rows": [';
            foreach ($data as $d){
                //echo $d['make'] . $d['total'];
        echo ' {
            "c": [
                {
                    "v": "'.$d['make'].'",
                    "f": null
                },
                {
                    "v": "'.$d['total'].'",
                    "f": null
                }
            ]
        }';

  }
  echo '] }' ;

Ниже приведена ошибка, которую я получаю в Google Chrome:

Uncaught Error: Invalid JSON string: {
    "cols": [
        {
            "id": "",
            "label": "Make",
            "pattern": "",
            "type": "string"
        },
        {
            "id": "",
            "label": "TotalNumber",
            "pattern": "",
            "type": "number"
        }
    ],
    "rows": [ {
            "c": [
                {
                    "v": "Vauxhall",
                    "f": null
                },
                {
                    "v": "2",
                    "f": null
                }
            ]
        } {
            "c": [
                {
                    "v": "Ford",
                    "f": null
                },
                {
                    "v": "1",
                    "f": null
                }
            ]
        } {
            "c": [
                {
                    "v": "Toyota",
                    "f": null
                },
                {
                    "v": "1",
                    "f": null
                }
            ]
        } {
            "c": [
                {
                    "v": "Mercedes",
                    "f": null
                },
                {
                    "v": "1",
                    "f": null
                }
            ]
        } {
            "c": [
                {
                    "v": "Citreon",
                    "f": null
                },
                {
                    "v": "1",
                    "f": null
                }
            ]
        }] }
  • 0
    попробуй свой json на jsonlint.com
  • 0
    нет, подождите ... это} {это делает, они должны быть}, {
Показать ещё 4 комментария
Теги:

2 ответа

0
$sql_qry = "SELECT 'make', COUNT(*) as total FROM 'vehicle' GROUP BY 'make' ORDER BY COUNT(*) DESC";
            $data = perform_query($db, $sql_qry);
        echo '{
    "cols": [
        {
            "id": "",
            "label": "Make",
            "pattern": "",
            "type": "string"
        },
        {
            "id": "",
            "label": "TotalNumber",
            "pattern": "",
            "type": "number"
        }
    ],
    "rows": [';
            foreach ($data as $d){
                //echo $d['make'] . $d['total'];
        echo ' {
            "c": [
                {
                    "v": "'.$d['make'].'",
                    "f": null
                },
                {
                    "v": "'.$d['total'].'",
                    "f": null
                }
            ]
        },'; // added a , here, but I don't know PHP well enough to NOT add the comma for the LAST loop

  }
  echo '] }' ;

см. комментарий - я не знаю PHP достаточно хорошо, чтобы подавить это, в последнем цикле в foreach - я ботаник javascript, я знаю достаточно PHP, чтобы быть опасным только

edit: этот переписывать может быть лучше

$sql_qry = "SELECT 'make', COUNT(*) as total FROM 'vehicle' GROUP BY 'make' ORDER BY COUNT(*) DESC";
$data = perform_query($db, $sql_qry);
$output = '';
foreach ($data as $d){
    if ($output != '') {
        $output .= ',';
    }
    $output .= '{
        "c": [
            {
                "v": "'.$d['make'].'",
                "f": null
            },
            {
                "v": "'.$d['total'].'",
                "f": null
            }
        ]
    }';
}
echo '{
    "cols": [
    {
        "id": "",
        "label": "Make",
        "pattern": "",
        "type": "string"
    },
    {
        "id": "",
        "label": "TotalNumber",
        "pattern": "",
        "type": "number"
    }
],
"rows": [' . $output . '] }' ;
  • 0
    Спасибо, попробую сейчас, пальцы скрещены
  • 0
    код не "завершен", будет запятая (,) ... поэтому я оставлю это для вас, чтобы иметь дело с: p
Показать ещё 4 комментария
-2

Наконец, он отсортировал здесь ответ:

// Connect to the MySQL database  
  require_once('includes/db_connect.php');
  require_once('includes/shared.php');
  $sql_qry = "SELECT 'make', COUNT(*) as total FROM 'vehicle' GROUP BY 'make' ORDER BY COUNT(*) DESC";
  $res = perform_query($db, $sql_qry);
echo '
{
  "cols": [
        {"id":"","label":"Topping","pattern":"","type":"string"},
        {"id":"","label":"Slices","pattern":"","type":"number"}
      ],
  "rows": [';

$total_rows = $res->fetchColumn();
$row_num = 0;
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
    // do loop stuff
    $row_num++;
    if ($row_num == $total_rows){
        echo '

        {"c":[{"v":"'.$row['make'].'","f":null},{"v":'.$row['total'].',"f":null}]}

            ';

    }else{
        echo '

        {"c":[{"v":"'.$row['make'].'","f":null},{"v":'.$row['total'].',"f":null}]},
            ';

    }
}
echo ']
}';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню