2015-05-28 38 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