簡體   English   中英

無效的JSON字符串

[英]Invalid JSON string

您好,我試圖為我的網站制作一個折線圖,以顯示MysQL中數據庫中的數據,但出現了錯誤的JSON字符串錯誤,沒有任何內容顯示這是我的代碼。 我以https://developers.google.com/chart/interactive/docs/php_example中的服務器端代碼為例

HTML

  <html>
  <head>
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    function drawChart() {
     var jsonData = $.ajax({
      url: "getData.php",
      dataType:"json",
      async: false
      }).responseText;


var data = new google.visualization.DataTable(); //DEFINE DATATABLE

data.addColumn('string', 'Label'); //ADD COLUMN 1
data.addColumn('number', 'Value'); //ADD COLUMN 2
console.log(jsonData);
data.addRows(jsonData); //ADD THE RECEIVED jsonData

// SET OPTIONS
var options = {'title':'REALLY PRETTY PIE CHART',
    'width':400,
    'height':300};

// Instantiate and draw THE chart
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
    </script>
  </head>

  <body>
    <!--Div that will hold the pie chart-->
    <div id="chart_div"></div>
  </body>
</html>

PHP

<?php 
include_once  'Config.php'; //configuration of my Mysql Database  
$public = 'admin'; //This variable is to select the user i want


try {

        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $gsent = $conn->prepare("SELECT estado,Hora FROM Datos Where Usuario LIKE '$public'");
        $gsent->execute();

$resultado = $gsent->fetchAll();
$resultAdoJson = json_encode($resultado);
$resulset = json_decode($resultAdoJson);
$result = array();
$i = 65;
foreach($resulset as $res) {

    $result[] = array(chr($i++), intval($res->estado));
}



print json_encode($result);
}

 catch (PDOException $pe) {

    die("Could not connect to the database $dbname :" . $pe->getMessage());

}

?>

Mysql表只有3行,具有值的admin:

Estado Hora

  • 50 2015年2月16日
  • 53 2015年2月16日
  • 10 2015年2月16日

這是我從php中打印得到的JSON

[{"estado":"50","0":"50","Hora":"2015-02-16","1":"2015-02-16"},  {"estado":"53","0":"53","Hora":"2015-02-16","1":"2015-02-16"},{"estado":"10","0":"10","Hora":"2015-02-16","1":"2015-02-16"}]Array

后續代碼var_dump($ resultado)

array(3) { [0]=> array(4) { ["estado"]=> string(2) "50" [0]=> string(2) "50" ["Hora"]=> string(10) "2015-02-16" [1]=> string(10) "2015-02-16" } [1]=> array(4) { ["estado"]=> string(2) "53" [0]=> string(2) "53" ["Hora"]=> string(10) "2015-02-16" [1]=> string(10) "2015-02-16" } [2]=> array(4) { ["estado"]=> string(2) "10" [0]=> string(2) "10" ["Hora"]=> string(10) "2015-02-16" [1]=> string(10) "2015-02-16" } } 

我知道代碼顯示餅狀圖,但是因為我是php的新手,所以我首先不了解json或javascript的任何知識,所以我想使示例像一個。 如何將結果轉換為折線圖?

您的PHP腳本在JSON字符串旁邊輸出單詞“ Array”。 刪除行echo $resultado; 從您的PHP腳本。

編輯:此外,您還必須將結果集格式化為具有['key','value']結構的數組的數組...例如:

[
      ['Mushrooms', 3],
      ['Onions', 1],
      ['Olives', 1],
      ['Zucchini', 1],
      ['Pepperoni', 2]
]

根據您的情況,如下更改PHP腳本:

$resultado = $gsent->fetchAll();

$result = array();
$i = 65;
foreach($resultado as $res) {

    $result[] = array(chr($i++), intval($res->estado));
}

print json_encode($result);

如您所見,我為值選擇了“ estado”,為標簽選擇了A,B,C(使用chr($i++) )。

修改您的JavaScript:

// STORE RESPONSE OF THE AJAX REQUEST IN jsonData
var jsonString = $.ajax({
      url: "getData.php",
      dataType:"json",
      async: false
      }).responseText;

var jsonData = eval(jsonString); //create an javascript array

var data = new google.visualization.DataTable(); //DEFINE DATATABLE

data.addColumn('string', 'Label'); //ADD COLUMN 1
data.addColumn('number', 'Value'); //ADD COLUMN 2

data.addRows(jsonData); //ADD THE RECEIVED jsonData

// SET OPTIONS
var options = {'title':'REALLY PRETTY PIE CHART',
    'width':400,
    'height':300};

// Instantiate and draw THE chart
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);

結果看起來像這樣:

結果餅圖

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM