【问题标题】:PHP json to google chart apiPHP json 到谷歌图表 api
【发布时间】:2014-04-12 21:31:45
【问题描述】:

我无法将我的 php 生成的 json 数组解析为谷歌图表。我已经包含了 Jquery,但有些我无法弄清楚如何解析我的 json 数据。我运行 MySQL 查询以从数据库中检索数据。然后我用 php json_encode 对查询结果进行编码。

我使用 ajax 从我的 php 文件中获取 json 数据。

getData.php:

<?php
function get_meta_values( $key, $type = 'workout', $status = 'publish' ) {
  global $wpdb;
  $user_ID = get_current_user_id();

  if ( empty( $key ) )
    return;

  $r = $wpdb->get_results(
    $wpdb->prepare( "
      SELECT pm.meta_value, p.post_date FROM {$wpdb->postmeta} pm
      LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
      INNER JOIN $wpdb->term_relationships
      ON (p.ID = $wpdb->term_relationships.object_id)
      INNER JOIN $wpdb->term_taxonomy
      ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
      WHERE pm.meta_key = '%s' 
      AND $wpdb->term_taxonomy.taxonomy = 'category'
      AND $wpdb->term_taxonomy.term_id IN (4)
      AND p.post_status = '%s' 
      AND p.post_type = '%s'
      AND p.post_author = $user_ID
      ORDER BY pm.meta_value DESC ",
    $key,
    $status,
    $type));

    if ( $r ) {
      $user_ids = wp_list_pluck( $r, 'post_date' );
      cache_users( $user_ids );
    }

    return $r;
}
$workout_history = get_meta_values( '1_rep', 'workout' );
echo json_encode($workout_history);

?>

保存图表的页面:

<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 jsonData = $.ajax({
      url: "http://localhost:41175/wp-content/themes/wordpress-bootstrap-master/getData.php",
      dataType: "json",
      async: false
    }).responseText;

  var obj = window.JSON.stringify(jsonData);
  var data = google.visualization.arrayToDataTable(obj);

  var options = {
    title: 'Test'
  };

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

当我尝试回显我的 json 文件时,它看起来像这样:

[
  {
    "meta_value":"999",
    "post_date":"2014-04-12 18:21:51"
  },
  {
    "meta_value":"1",
    "post_date":"2014-04-12 18:58:20"
  }
] 

对我做错了什么有什么建议吗?

【问题讨论】:

    标签: javascript php ajax json google-visualization


    【解决方案1】:

    https://developers.google.com/chart/interactive/docs/reference#google.visualization.arraytodatatable

    您的 JSON 数据集似乎不适合与该方法一起使用。它应该是(在 javascript 中):

    var data = [
        ['metavalue', 'post_date'],
        ['999', '2014-04-12 18:21:51'],
        ['1', '2014-04-12 18:58:20']
    ]
    

    在 JSON 中等于:

    [["metavalue","post_date"],["999","2014-04-12 18:21:51"],["1","2014-04-12 18:58:20"]]
    

    由于我不知道$workout_history 来自哪里,我无法帮助您了解如何做到这一点。

    【讨论】:

    • 很抱歉,一定是错过了什么。我现在对其进行了编辑以包含创建$workout_history 的函数。
    【解决方案2】:

    在您 return $r 执行此操作之前,您的对象图不正确:

    $results = array();
    $result[] = array_values($r);
    return $result;
    

    或者,您可以像这样构建一个数组数组:

    $results = array();
    $result[] = array($r['message_type'], $r['post_date']);
    return $result;
    

    【讨论】:

    • 感谢您的建议,但它返回null
    • 也许我应该改为如何格式化我的 JSON var。而不是显示 [{"meta_value":"999","post_date":"2014-04-12 18:21:51"}]我想像这样显示它:[{"999":"2014-04-12 18:21:51"}]任何建议?
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 2013-10-14
    • 2012-01-17
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多