当前位置: 首页 > 面试题库 >

Highcharts数据系列问题与Ajax / json和PHP

陶法
2023-03-14
问题内容

这是我的第一个要求,我已经阅读了与此问题相关的许多其他相关文章,但我仍然陷入困境,几乎无能为力…因此,非常感谢您的帮助!

我在Page1.php上具有以下Highcharts对象,并且正在使用AJAX在页面加载以及下拉选项更改时从Page2.php获取数据。

(为了便于阅读而被截断):

$(document).ready(function() {

   var e = document.getElementById("selOption"); //<--- This is the dropdown
   var domText = e.options[0].text;
   var domID = e.options[e.selectedIndex].value;

   var options = {
      chart: {
         renderTo: 'linechart',
         type: 'line'
      },
      title: {
         text: 'Title for ' + domText
      },
      subtitle: {
         text: ''   
      },
      xAxis: {
         type: 'datetime',
         dateTimeLabelFormats: {
            month: '%b %e, %Y',
            year: '%Y'
         }
      },
      yAxis: {
         title: {
            text: 'Important Values'
         },
         reversed: true,
         min: 0,
         max: 100
      },
      tooltip: {
         formatter: function() {
                   return '<b>'+ this.series.name +'</b><br/>'+
               Highcharts.dateFormat('%b %e', this.x) +': '+ this.y;
         }
      },
      series: []

};

$.get('Page2.php?domID=' + domID,function(data) {
    $.each(data, function(key,value) {
        //var series = {};
        //series.name.push(value);
        //series.data.push([value]);
        options.series.push(data);
        //alert(data);
    });

    var linechart = new Highcharts.Chart(options);
});

});

Page2.php具有以下发送回json的信息:

$sqlSelect = "SELECT Item1,Item2,Item3 FROM... ";
$result = mysql_query($sqlSelect);

while ($item = mysql_fetch_assoc($result)) {            
    $name = $item['Item1'];
    $date = str_replace("-",",",$item['Item2']);
    $pos = $item['Item3'];

    $arr = array("name"=>$name,"data"=>"[Date.UTC(".$date."), ".$pos." ],");
    echo json_encode($arr);         
}

我的json返回看起来像这样:

{"name":"Item1","data":"[Date.UTC(2011,11,08), 4 ],"}
{"name":"Item1","data":"[Date.UTC(2011,11,08), 2 ],"}

加载图表时,它会在底部填充135系列名称(?!?!?!),并且在折线图中似乎不会显示点。

如果我删除双引号并将结果硬编码到series数组中,则效果很好(尽管我注意到该示例在对象之间似乎没有逗号。

谢谢您的所有帮助…特别是快速的回复!;-)


问题答案:

解决了:

我找到了一个最终成功的答案!令人沮丧的是,我花了几天的时间,因为Highcharts并没有很好地对其进行记录(和/或也许我对jQuert和JavaScript的理解仍处于新手水平)。

答案是 不要 在您的json对象中将X /
Y数据作为预制数组发送,而只是将构成Date(x值)和Value(y值)的数字作为逗号分隔值列表发送一个json对象,然后在客户端进行解析和推送。

例如: 我最初是想让我的PHP发送类似

[{"name":"Name 1","data":["[Date.UTC(2011,11,08), 4 ]","[Date.UTC(2011,11,09), 4 ]","[Date.UTC(2011,11,10), 4 ]","[Date.UTC(2011,11,11), 4 ]","[Date.UTC(2011,11,14), 3 ]"]}

但是我真正需要做的是发送类似

[{"name":"Name 1","data":["2011,11,08, 4","2011,11,09,4"....`

第一步是确保将“系列”选项设置为空数组 series: []

(我之所以这样提,是因为我看到了其他答案,但答案有所不同)。

然后,在getJSON函数中,需要为要引入的每个对象创建一个新对象,其中还包括一个空的“数据”数组(请参见下面的“ var系列”)。

然后嵌套一些$.each循环以解析并将数据推入其必要的数组,并填充每个对象的“名称”:

    $.getJSON('http://exmaple.com/getdata.php?ID=' + id, function(data) {           
        $.each(data, function(key,value) {
            var series = { data: []};
            $.each(value, function(key,val) {
                if (key == 'name') {
                    series.name = val;
                }
                else
                {
                    $.each(val, function(key,val) {
                        var d = val.split(",");
                        var x = Date.UTC(d[0],d[1],d[2]);
                        series.data.push([x,d[3]]);
                    });
                }
            });
            options.series.push(series);
        });

在上面的代码之后,您需要实例化图表:

var chart = new Highcharts.Chart(options);

就是这样!

希望其他人会发现这个答案有用,并且不需要几天来试图解决这个问题。:-)



 类似资料:
  • 问题内容: 我有以下在运行时生成的json数组。因此,名称/数据对的数量不同。 我想将此数据传递给highcharts中的系列。 这就是我目前的做法。 但是,如果更改数组中元素的数量,则此方法将无效。 我该如何解决这个问题?演示代码将帮助我。 问题答案: 我解决了问题 更改了json数组,如下所示: 现在,将其直接传递到highcharts中的系列。 做完!!!!!

  • 我有以下运行时生成的json数组。因此,名称/数据对的数量有所不同。 我想将这些数据传递到highcharts系列中。 这就是我目前的做法。 但是如果数组中元素的数量改变了,这就不起作用了。我该如何解决这个问题?演示代码会对我有帮助。 我已经考虑了以下问题,但我无法解决这个问题。 动态添加到高图表 海图系列数据阵列

  • 问题内容: 有什么方法可以将一些其他数据传递到将用于显示在图表“工具提示”中的系列对象? 例如 在这里,我们只能对系列使用series.name,this.x和this.y。可以说我需要随数据集一起传递另一个动态值,并且可以通过系列对象进行访问。这可能吗? 谢谢大家。 问题答案: 是的,如果您按照如下所示设置系列对象,每个数据点都是一个哈希,则可以传递额外的值: 在工具提示中,您可以通过传入的对象

  • 问题内容: 我在过去的3个小时中一直在四处寻找并找到答案的这段代码遇到了问题。由于不成功,我将发布代码并询问我在Web服务上应具有哪种参数来处理此请求: 现在,我应该能够获得“ dataToSend”的哪种签名? 我试过了: 和 并且 问题答案: 尝试将数据作为字符串而不是对象传递,即: 这样做的原因是,如果您将一个对象指定为数据,那么jQuery将使用查询字符串格式对数据进行序列化,而服务器将直

  • 我是JS的初学者,以前从未接触过PHP。经过几个小时的搜索,我拼凑出了这一块。我想做的是,有一个简单的表单,里面有几个字段,这些字段被保存到一个JSON文件中。我希望每个后续条目都附加到文件的末尾,这样每个JSON对象就是这个人的名字和他们的注释。 通过下面的代码,我已经成功地将一些东西传递给PHP脚本,并将条目追加到json文件中。但是在json文件中显示的是这样的(在两个条目之后): 这是我的

  • 我有一个通过Spring Data Rest序列化@关系实体到JSON的问题。每当我创建@关系实体时,我都会在将图序列化到JSON时遇到无限递归。 使用JSOG试图呈现图形只会导致不同的、格式错误的JSON响应。 虽然我可以通过使用@JsonManaged参考来避免这个问题,但它不能解决这个问题,因为我想从两个节点公开关系。 我已经创建了一个简单的应用程序来展示这个问题。可以在这里找到:https