【问题标题】:How to use for loop array to add series dynamically for line chart如何使用for循环数组为折线图动态添加系列
【发布时间】:2018-09-09 07:14:28
【问题描述】:

我必须将数组传递给从 ajax 代码生成的 series。 我有这个多个字段/数组 Linehart 值Result[i].MONTHLY_TOTAL_FTE,MonthYear Result[i].MONTH + Result[i].YEAR,Country Result[i].COUNTRY_NAME 所以我得按照这个来显示一个折线图。

我正在使用下面的sn-p代码

$.ajax({
                type: "GET",
                url: "/api/ReportAPI/GetMonthlyEmployeeFte",
                data: '{}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (Result) {
                  var data = [];
                  var data2 = [];
                  var data3 = [];
                  for (var i in Result) {                     
                    var serie = new Array(Result[i].MONTH + Result[i].YEAR);
                    data.push(serie);
                    var fte = new Array(Result[i].MONTHLY_TOTAL_FTE);                       
                    data2.push(fte);
                    var contry = new Array(Result[i].COUNTRY_NAME);                      
                    data3.push(contry); 
                    }                    
                    DreawLineChart(data, data2, data3);                                                   
                },
                failure: function (response) {
                    alert(response.responseText);
                },
                error: function (response) {
                    alert(response.responseText);
                }
            }); 


     function DreawLineChart(series, ssssss,contryname) {
     Highcharts.chart('container2', {
        chart: {
            type: 'line'
        },
        title: {
            text: 'Monthly Employee FTE'        },
        subtitle: {
            //text: 'Source: WorldClimate.com'
        },
        xAxis: {
            //categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            categories: series
        },     
        yAxis: {
            title: {
                text: 'FTE'
            }
        },
        plotOptions: {
            line: {
                dataLabels: {
                    enabled: true
                },
                enableMouseTracking: false
            }
        },
        /* series: [{
             name: 'Singapore',
             data: [7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]

         }, {
             name: 'New Zealand',
             data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
         }] */
           series: [{
               name:contryname, //'Singapore',
          data: JSON.parse("[" + ssssss + "]") //[3.9, 4.2, 5.7, 8.5] //ftes
          }]

    });
   }

问题是它显示日本国家的数据,但它显示日本其他国家的数据。点击其他国家,如新西兰,新加坡,它显示空白。

我的 sql 存储过程来获取数据

SELECT YEAR(POSBDGT.[PLAN_START_DATE]) as [POSITION_FTE_YEAR],
  MONTH(POSBDGT.[PLAN_START_DATE]) as [POSITION_FTE_MONTH_NO],
  CONVERT(varchar(3),DATENAME(month,POSBDGT.[PLAN_START_DATE])) as [POSITION_FTE_MONTH],
  SUM([TOTALFTE]) AS [TOTALFTE], 
  COMAST.[name]
  FROM [DBO].[POSITION_FTE] POSFTE WITH (NOLOCK)
  INNER JOIN [DBO].[POSITION_BUDGET] POSBDGT WITH (NOLOCK) ON POSFTE.POSITION_ID = POSBDGT.POSITION_ID
   INNER JOIN [DBO].POSITION_LOCATION POSLOC WITH (NOLOCK) ON POSLOC.POSITION_ID = POSFTE.POSITION_ID
  INNER JOIN [DBO].[country_master] COMAST WITH (NOLOCK) ON COMAST.[country_id] = POSLOC.COUNTRY_ID
  GROUP BY COMAST.[name], YEAR(POSBDGT.[PLAN_START_DATE]),DATENAME(month,POSBDGT.[PLAN_START_DATE]),MONTH(POSBDGT.[PLAN_START_DATE]) 

表格结果

【问题讨论】:

    标签: javascript jquery for-loop highcharts series


    【解决方案1】:

    您面临的问题是series 的布局如下所示:

    series: [{
              name: ['England', 'Japan', 'Singapore']  //contryname
              data: JSON.parse("[" + [1, 2, 3, 4]+ "]") //ssssss
    

    为了让 Highcharts 工作,您需要以下格式

        series: [{
                     name: 'Singapore',
                     data: [7.0, 6.9]
    
                 }, {
                     name: 'New Zealand',
                     data: [3.9, 4.2]
                 }] 
    

    您可以通过确保您的 Result 循环看起来像这样来实现这一点:

     $.ajax({
                    type: "GET",
                    url: "/api/ReportAPI/GetMonthlyEmployeeFte",
                    data: '{}',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (Result) {
                          var data = []
                          var categories = []
                          for (var i in Result) {                     
                              var serie = new Array(Result[i].MONTH + Result[i].YEAR);
                              categories.push(serie);
                              var fte = {name: Result[i].COUNTRY_NAME, data: 
                                         [Result[i].MONTHLY_TOTAL_FTE]};                       
                              data.push(fte);      
                              }  
                      DreawLineChart(categories, data);                                                   
                    },
                    failure: function (response) {
                        alert(response.responseText);
                    },
                    error: function (response) {
                        alert(response.responseText);
                    }
                }); 
    
    
    
    
    
        function DreawLineChart(categories, dataArray) {
             Highcharts.chart('container2', {
                chart: {
                    type: 'line'
                },
                title: {
                    text: 'Monthly Employee FTE'        },
                subtitle: {
                    //text: 'Source: WorldClimate.com'
                },
                xAxis: {
                    categories: categories
                },     
                yAxis: {
                    title: {
                        text: 'FTE'
                    }
                },
                plotOptions: {
                    line: {
                        dataLabels: {
                            enabled: true
                        },
                        enableMouseTracking: false
                    }
                },
                 series: dataArray //This is where the new array of data appears
    
            });
           }
    

    上面的代码获取结果并将其转换为我上面提到的格式。这应该可以解决您的问题。但是,我无法完全复制您的输入,因为它没有给出。

    【讨论】:

    • 它只显示国家名称参考这个链接图片ibb.co/ebnJN7
    • 抱歉,我忘记了一些语法。我更新了我的答案,现在它应该显示不同系列的数据点。
    • 仍然没有显示日志:- (5) [{...}, {...}, {...}, {...}, {...}] 0 : data : ["6"] name : "日本”_colorIndex:0 _symbolIndex:0 proto:对象 1:数据:[“2”] 名称:“新西兰”_colorIndex:1 _symbolIndex:1 proto:对象
    • @SanjayNakate data : ["6"] 部分让我认为结果已被解析为字符串而不是整数。它是作为字符串还是整数存储在 Result 对象中?
    • 检查这张图片ibb.co/mnHM9n,在解析它的显示数据后显示错误 var fte = { name: Result[i].COUNTRY_NAME, data: JSON.parse("[" + Result [i].MONTHLY_TOTAL_FTE + "]") //[结果[i].MONTHLY_TOTAL_FTE] };
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2023-03-06
    • 1970-01-01
    • 2015-07-31
    • 2020-08-19
    • 2020-01-25
    相关资源
    最近更新 更多