【问题标题】:Plot Highchart Gauge with JSON Data使用 JSON 数据绘制 Highchart Gauge
【发布时间】:2013-12-31 18:58:07
【问题描述】:

如何使用 JSON 数据绘制 highchart Gauge?

我正在研究 highchart 仪表,我成功地显示了数据库中的最新数据。我为此使用了JavaScriptSerializer

代码是..

  <script type="text/javascript">
    $(function () {
    var chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            type: 'gauge',
            plotBackgroundColor: null,
            plotBackgroundImage: null,
            plotBorderWidth: 0,
            plotShadow: false
        }, 
//Other char parameter comes here
}


   function (chart) {
            setInterval(function () {

                $.getJSON("S14.aspx", function (data, textStatus) {
                    console.log(data);
                    $.each(data, function (index, wind) {
                        var point = chart.series[0].points[0],
                        newVal = wind;
                        point.update(newVal);
                    });

                });
            }, 3000);
        });

JSON 的代码是

public string chartData1
    {
        get;
        set;

    }
    protected void Page_Load(object sender, EventArgs e)
    {
        List<double> _data = new List<double>();
        GetData();
        foreach (DataRow row in dt.Rows)
        {

            _data.Add((double)Convert.ToDouble(row["S11"]));

        }
        JavaScriptSerializer jss = new JavaScriptSerializer();
        chartData1 = jss.Serialize(_data);

    }

我的 JSON 看起来像

[1387204961992.4268,72]

问题是仪表的刻度盘没有根据我需要刷新页面的最后一个值移动。我知道这是因为 GetData 函数只执行一次。我被困在这里了。

如何根据数据库中的最新值更新来获取拨号移动?

【问题讨论】:

    标签: c# asp.net highcharts


    【解决方案1】:

    为了更新图表,浏览器需要从服务器请求最新数据。有两种方法可以做到这一点:

    1. 页面刷新 - 使用最新数据再次获取整个页面。
    2. Ajax 请求。这只会请求数据,而无需重新加载整个页面。

    我想您想在不重新加载整个页面的情况下更新图表。为此,您需要了解如何使用 jquery 发出 ajax 请求。

    highcharts 网站有一些资源可以帮助您(例如http://www.highcharts.com/docs/working-with-data/preprocessing-live-data)。您需要学习如何在 javascript 中进行 ajax 调用,并使用返回的数据来更新您的图表。您还需要编写返回 ajax 数据的服务器端部分。给出的例子是在 php 中,但是在 asp.net 中做类似的事情应该是相当直接的。

    【讨论】:

      【解决方案2】:

      尝试放置这部分代码

      setInterval(function() {
          $(function() {
          $.getJSON('S12.aspx', function(data) {
              $.each(data, function(val) {
              if (val !== null)
              {
              var point = chart.series[0].points[0];
                  point.update(val);
              }
              });
          });
          })
      },2000)
      

      内部回调图表,像这里:http://www.highcharts.com/demo/gauge-speedometer

      如果您收到任何错误,请附上。

      【讨论】:

      • 不,它不工作,Gauge 只显示值 0 。
      • 是否可以将您的问题重现为现场演示?
      • S12.aspx 页面在 Intranet 网络中,而不是在 Internet 上。
      • 对,s12.aspx返回的可能是什么?像 json 还是其他的?
      • 数据似乎是正确的 (jsfiddle.net/h6j2p) 但我建议在 getJSON() 函数中打开控制台(开发人员工具)并粘贴 console.log(data),然后你就会知道 json 是否正确正确。
      【解决方案3】:

      我认为visual studio 2012 中存在错误或其他内容。我只是将整个代码粘贴到新的aspx 页面上,它开始工作了。我没有做任何其他事情,我只是将代码粘贴到另一个页面上。

      <script type="text/javascript">
      
      
              $(function () {
                  $('#container1').highcharts({
      
                      chart: {
                          type: 'gauge',
                          alignTicks: false,
                          plotBackgroundColor: null,
                          plotBackgroundImage: null,
                          plotBorderWidth: 0,
                          plotShadow: false
                      },
      
                      title: {
                          text: 'Pressure Meter'
                      },
      
                      pane: {
                          startAngle: -150,
                          endAngle: 150
                      },
      
                      yAxis: [{
                          min: 0,
                          max: 1000,
                          lineColor: '#339',
                          tickColor: '#339',
                          minorTickColor: '#339',
                          offset: -25,
                          lineWidth: 2,
                          labels: {
                              distance: -20,
                              rotation: 'auto'
                          },
                          tickLength: 5,
                          minorTickLength: 5,
                          endOnTick: false
                      }, {
                          min: 0,
                          max: 1000,
                          tickPosition: 'outside',
                          lineColor: '#933',
                          lineWidth: 2,
                          minorTickPosition: 'outside',
                          tickColor: '#933',
                          minorTickColor: '#933',
                          tickLength: 5,
                          minorTickLength: 5,
                          labels: {
                              distance: 12,
                              rotation: 'auto'
                          },
                          offset: -20,
                          endOnTick: false
                      }],
      
                      series: [{
                          name: 'Pressure',
                          data: [80],
                          dataLabels: {
                              formatter: function () {
                                  var psi = this.y,
                                      bar = Math.round(psi / 14.50);
                                  return '<span style="color:#339">' + psi + ' psi</span><br/>' +
                                      '<span style="color:#933">' + bar + ' bar</span>';
                              },
                              backgroundColor: {
                                  linearGradient: {
                                      x1: 0,
                                      y1: 0,
                                      x2: 0,
                                      y2: 1
                                  },
                                  stops: [
                                      [0, '#DDD'],
                                      [1, '#FFF']
                                  ]
                              }
                          },
                          tooltip: {
                              valueSuffix: ' psi'
                          }
                      }]
      
                  },
              // Add some life
              function (chart) {
                  setInterval(function () {
      
                      $.getJSON("S12.aspx", function (data, textStatus) {
      
                          $.each(data, function (index, wind) {
                              var point = chart.series[0].points[0],
                              newVal = wind;
                              point.update(newVal);
                          });
      
                      });
                  }, 3000);
              });
              });
      
      
          </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2021-03-25
        • 1970-01-01
        • 2017-09-24
        相关资源
        最近更新 更多