2015-05-28 44 views
0

我正在使用charts.js插件創建圖表。它使用一個javascript數組data來生成圖表。Php/ajax以與javascript數組相同的形式返回JSON

var data = { 
    labels: ["January", "February", "March", "April", "May", "June", "July"], 
    datasets: [ 
     { 
      label: "My First dataset", 
      fillColor: "rgba(220,220,220,0.2)", 
      strokeColor: "rgba(220,220,220,1)", 
      pointColor: "rgba(220,220,220,1)", 
      pointStrokeColor: "#fff", 
      pointHighlightFill: "#fff", 
      pointHighlightStroke: "rgba(220,220,220,1)", 
      data: [65, 59, 80, 81, 56, 55, 40] 
     }, 
     { 
      label: "My Second dataset", 
      fillColor: "rgba(151,187,205,0.2)", 
      strokeColor: "rgba(151,187,205,1)", 
      pointColor: "rgba(151,187,205,1)", 
      pointStrokeColor: "#fff", 
      pointHighlightFill: "#fff", 
      pointHighlightStroke: "rgba(151,187,205,1)", 
      data: [28, 48, 40, 19, 86, 27, 90] 
     } 
    ] 
}; 

我想使用ajax返回不同時間範圍的結果。 我怎樣才能生成一個響應與PHP,以便當我在ajax成功讀取它時,我可以使用它與我使用var data生成初始圖表相同的方式。

 $.ajax('/chart.php', { 
      type: 'POST', 
      data: {range: range}, 
      dataType: 'json', 
      success: function(data) { 
       console.log(data); 
      } 
     }); 
+0

如何在你的'成功了'data'()'函數從您上面所示的結構有什麼不同? –

+0

它只會在第一個數組「標籤」中具有不同的值,並且子數組「數據」將具有與「標籤」第一個數組相同數量的值。 – user4675957

回答

1

你想要的是創建對象的數組,然後使用json_encode,它應該產生你所需要的。試試這個:

$array = array(); 
$dataset = new stdClass; 
$dataset->label = "My first dataset"; 
// repeat for each field 
$array[] = $dataset; 
echo json_encode($array); 

我們可以做些什麼來縮短這個是不是每一次我們可以use an array and typecast it to an object這樣聲明一個新的數據集:

$datasets = array(); 
$datasets[] = (object) array(
    'label' => "My First dataset", 
    'fillColor' => "rgba(220,220,220,0.2)", 
    'strokeColor' => "rgba(220,220,220,1)", 
    'pointColor' => "rgba(220,220,220,1)", 
    'pointStrokeColor' => "#fff", 
    'pointHighlightFill' => "#fff", 
    'pointHighlightStroke' => "rgba(220,220,220,1)", 
    'data' => [65, 59, 80, 81, 56, 55, 40] 
); 

Check out this eval.in的工作示例。

更新

爲了您的完整結構,你需要:

$data = (object) [ 
    'labels' => ["January", "February", "March", "April", "May", "June", "July"], 
    datasets => [] 
]; 

$data->datasets[] = (object) [ 
    'label' => "My First dataset", 
    'fillColor' => "rgba(220,220,220,0.2)", 
    'strokeColor' => "rgba(220,220,220,1)", 
    'pointColor' => "rgba(220,220,220,1)", 
    'pointStrokeColor' => "#fff", 
    'pointHighlightFill' => "#fff", 
    'pointHighlightStroke' => "rgba(220,220,220,1)", 
    'data' => [65, 59, 80, 81, 56, 55, 40] 
]; 

echo json_encode($data); 
+0

謝謝你的回覆。我如何處理標籤:[「一月」,「二月」,「三月」,「四月」,「五月」,「六月」,「七月」]以及如何將「標籤」數組和「數據集」 「在一個陣列? – user4675957

+0

@ user4675957我已經爲你更新了我的答案。 – Styphon