一尘不染

JSON的jqPlot

json

我想使用jqPlot,它使用来自JSON的来自服务器端的数据,如本示例中所述:http ://www.jqplot.com/tests/data-
renderers.php

我的代码与示例几乎相同:

function myGraph(jsonurl) {

  var ajaxDataRenderer = function(url, plot, options) {
    var ret = null;
    $.ajax({
      // have to use synchronous here, else the function
      // will return before the data is fetched
      async: false,
      url: url,
      dataType:"json",
      success: function(data) {
        ret=data;
        console.warn(data);
      }
    });
    return ret;
  };



var plot1 = $.jqplot('chartdiv', jsonurl, {
      title: 'myTitle',
      dataRenderer: ajaxDataRenderer,
      dataRendererOptions: {  unusedOptionalUrl: jsonurl    },
      series: [{
          label: 'myLabel',
          neighborThreshold: -1
      }],
      axes: {
          xaxis: {
              renderer: $.jqplot.DateAxisRenderer,
            //  min:'August 1, 2010 16:00:00',
              tickInterval: '2 months',
              tickOptions:{formatString:'%Y-%m-%d.%H:%M:%S'}
          },
          yaxis: {
              tickOptions:{formatString:'$%.2f'}
          }
      },
  });

在服务器端,我正在使用PHP(和Yii)。网页返回一个数组,该数组通过使用编码CJSON::encode($resultArray);(通过此Yii函数传递到PHP
JSON编码函数)。PHP脚本的结果如下所示:

{"2011-04-25 14:46:40":2,"2011-04-26 14:46:40":3,"2011-04-27 14:46:40":5}

客户端的Ajax请求解决了类似的问题(来自的输出console.info();

Object { 2011-04-25 14:46:40=2,  2011-04-26 14:46:40=3, ...}

jqPlot可能期望以下格式:

[[["2011-04-25 14:46:40":0],["2011-04-26 14:46:40",3],["2011-04-27 14:46:40",0]]]

所有的时间我都得到了error uncaught exception: [object Object]
什么错了?有没有一种方法可以将对象转换为典型的数组形式?

谢谢


阅读 273

收藏
2020-07-27

共1个答案

一尘不染

我有这样的事情。我有2个用于值,标签的数组。您应该从arrays构造如下字符串。

        $size = count($labels);

        for ($i = 0; $i < $size; $i++) {
            $result = $result . "['" . $labels[$i] . "'," . $values[$i] . "]";
            if($i != $size -1 ){
                $result = $result . ",";
            }
        }

或者,如果您没有2个数组,而只有这个字符串{“ 2011-04-25 14:46:40”:2,“ 2011-04-26 14:46:40”:3,“
2011-04-27 14 :46:40“:5}您可以将{替换为[,}替换为],将{替换为],[。一个肮脏但快速的解决方案。

在上面的代码之后,您可能需要在两边都附加’[‘和’]’并返回值。

2020-07-27