Набор данных серии Highcharts из процедуры ajax php

#javascript #php #ajax #highcharts

#javascript #php #аякс #высокие диаграммы

Вопрос:

Я использую Highcharts на своем веб-сайте. Затем процедура Ajax PHP для динамической загрузки данных из базы данных, нажав на элемент легенды. Теперь я хочу установить результат в данные серии, но безуспешно, так как я не могу использовать «это», поскольку «это» больше не является элементом легенды. Вы сможете понять это из приведенного ниже кода. Я попробовал что-то вроде chart.series.setData[] , но это не сработало. Спасибо за любые решения о том, как я могу действовать дальше.

 <script>
Highcharts.chart('myChart', {
    series: [<?echo $allnames;?>],
    legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'top'
    },
    plotOptions: {
        series: {
            events: {
                legendItemClick: function() {
                    var jmeno=this.name;
                    var xmlhttp = new XMLHttpRequest();
                    xmlhttp.onreadystatechange = function() {
                        if (this.readyState == 4 amp;amp; this.status == 200) {
                            myData= this.responseText;
                            //I am unable to use 'this' as it is not the legend item
                            this.setData([myData]);
                        }
                    };
                    xmlhttp.open("GET","/data.php?q=" jmeno,true);
                    xmlhttp.send();
                }
            }
        }
    },
});
</script>
 

Ответ №1:

Решено.

 <script>
Highcharts.chart('graf', {
    title: {text: 'Hello darkness my old friend'},
    series: [<?echo $allnames;?>],
    legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'top'
    },
    plotOptions: {
        series: {
            events: {
                legendItemClick: function() {
                    var jmeno=this.name;
                    var that=this;
                    var xmlhttp = new XMLHttpRequest();
                    xmlhttp.onreadystatechange = function() {
                        if (this.readyState == 4 amp;amp; this.status == 200) {
                            var myData = this.responseText;
                            var splitData = myData.split(",");
                            var newData = [];
                            for(var i = 0;i<splitData.length;i  ){
                                var num = splitData[i];
                                if(num != ""){
                                num = parseFloat(num);
                                newData.push(num);
                                }
                            }                           
                            that.setData(newData);
                        }
                    };
                    xmlhttp.open("GET","/data.php?q=" jmeno,true);
                    xmlhttp.send();
                }
            }
        }
    },
});
</script>