首页 > 解决方案 > 来自ajax php程序的Highcharts系列setData

问题描述

我在我的网站上使用 Highcharts。然后是一个 Ajax PHP 程序,通过单击图例项从数据库动态加载数据。现在我想将结果设置到系列数据中,但没有成功,因为我无法使用“this”,因为“this”不再是图例项目。您将能够从下面的代码中理解它。我尝试了类似的东西,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 && 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>

标签: javascriptphpajaxhighcharts

解决方案


解决。

<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 && 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>


推荐阅读