Javascript переменная не работает внутри высоких диаграмм - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь динамически отображать диаграммы с высокими значениями p ie, я передаю точный формат значений в индекс данных в диаграммах с высоким уровнем, но он ничего не показывает в диаграмме, если я даю то, что переменная имеет значение, непосредственно она работает хорошо, но при передаче переменной напрямую отображается пустая диаграмма p ie,

Вот мой javascript код,

function get_product_chart_by_filter()
   {
      var product_year_raw = $('#top_least_pro_year_filt').val();
      var pro_top_least = $('#top_least_pro_filt').val();
      var next_year = '';
      var product_year = '';
      var pro_top_res = '';
      if (product_year_raw.length == 4) {
         next_year = parseInt(product_year_raw) + 1;
         product_year = product_year_raw+'-'+next_year;
      }
      else {
         product_year = product_year_raw;
      }
      if (pro_top_least == 1) {
         $('#pro_top_or_least').empty().html('Top ');
      }
      else {
         $('#pro_top_or_least').empty().html('Least ');
      }
      $.ajax({
         type:"POST",
         url:baseurl+'Dashboard/product_dashboard_dynamic',
         data:{'year':product_year,'top_or_least':pro_top_least},
         cache: false,
         dataType: "html",
         success: function(result){

            pro_top_res = JSON.parse(result);
            var data_series = '';
            for (var i = pro_top_res.length - 1; i >= 0; i--) {
                data_series += "['"+pro_top_res[i].product_name+"',"+Number(pro_top_res[i].product_order_count)+"],";
            } 
            data_series = data_series.replace(/,\s*$/, "");
           // Output of 'data_series' variable = ['Basmathi',6],['null',6],['Basmathi',6],['Basmathi',20],['Basmathi',21] 

            Highcharts.chart('top_5_products_container', {
             chart: {
                 plotBackgroundColor: null,
                 plotBorderWidth: 0,
                 plotShadow: false
             },
             credits:false,
             title: {
                 text: 'Products',
                 align: 'center',
                 verticalAlign: 'middle',
                 y: 60
             },
             tooltip: {
                 pointFormat: '{series.name}: <b>{point:y}</b>'
             },
             accessibility: {
                 point: {
                     valueSuffix: '%'
                 }
             },
             plotOptions: {
                 pie: {
                     dataLabels: {
                         enabled: true,
                         distance: -50,
                         style: {
                             fontWeight: 'bold',
                             color: 'white'
                         }
                     },
                     startAngle: -90,
                     endAngle: 90,
                     center: ['50%', '75%'],
                     size: '110%'
                 }
             },
             series: [{
                 type: 'pie',
                 name: 'Product',
                 innerSize: '50%',
                 data: [data_series]
             }]
         });

         }
      });

   }

Вот мой код на стороне сервера,

public function product_dashboard_dynamic()
    {
        $dashboard_settings_info = get_dashboard_settings_info();
        $top_or_least = $this->input->post('top_or_least');
        $raw_yr = $this->input->post('year');
        $exp_yr = explode('-', $raw_yr);
        $yr1 = $exp_yr[0];
        $yr2 = $exp_yr[1];
        $top_least_count = $dashboard_settings_info->max_product_count;
        $get_top_least_product = $this->Dashboard_model->get_top_least_product($top_or_least,$yr1,$yr2,$top_least_count);
        echo json_encode($get_top_least_product);
    }

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 17 июня 2020

Я считаю, что это как-то связано с использованием конкатенированной строки, а не массива, поэтому вы, возможно, можете попробовать ... хотя я не использовал highcharts до

Change

var data_series = '';
for (var i = pro_top_res.length - 1; i >= 0; i--) {
    data_series += "['"+pro_top_res[i].product_name+"',"+Number(pro_top_res[i].product_order_count)+"],";
} 

в:

var data_series = [];
for( var i = pro_top_res.length - 1; i >= 0; i-- ) {
    var obj=pro_top_res[i];

    data_series.push( [ obj.product_name, parseInt( obj.product_order_count ) ] );
}

удалить

data_series = data_series.replace(/,\s*$/, "");

Наконец, измените конфигурацию для размещения новых входных данных в виде массива

'series': [{
    'type': 'pie',
    'name': 'Product',
    'innerSize': '50%',
    'data':data_series
}]
...