Updating Highcharts realtime using Socket.io

express, highcharts, javascript, node.js, socket.io

Solution

And what error do you have in console? ;) I guess somethng about 'cannot read property of udefined'. You need to create chart variable first, then you can use that variable, right? So:

    $('#container').highcharts({
        chart: {
            type: 'column',
            events: {
                load: function(){
                    var chart = this; // create chart variable for future use
                    socket.on('response', function(arr){

Then that code should work:

                            //Tried this, doesnt work 
                            var sold=chart.series[0].data[0].y;
                            chart.series[0].data[0].update(sold+1);

If this won't be enough, then copy&paste errors here.

Problem

I'm making a dashboard using node.js, socket.io and highcharts. I want my chart to update dynamically on receiving a request from socket.io. How do I do that? Here is my client side code, ``` <script> var socket=io(); var sales=0; var e1tcount=0; var e1scount=0; var e2tcount=0; var e2scount=0; $(function () { $('#container').highcharts({ chart: { type: 'column', events: { load: function(){ socket.on('response', function(arr){ $('#c1').html(arr[0]); sales+=arr[2]; $('#sales').html(sales); if(arr[1]=="CT") { e1tcount++; $('#e1t').html(e1tcount); e1scount+=arr[2]; $('#e1s').html(e1scount); //Tried this, doesnt work var sold=chart.series[0].data[0].y; chart.series[0].data[0].update(sold+1); } if(arr[1]=="AB") { e2tcount++; $('#e2t').html(e2tcount); e2scount+=arr[2]; $('#e2s').html(e2scount); } }); } } }, title: { text: 'Stacked column chart' }, xAxis: { categories: ['Event 1', 'Event 2'] }, yAxis: { min: 0, title: { text: 'Total fruit consumption' }, stackLabels: { enabled: true, style: { fontWeight: 'bold', color: (Highcharts.theme && Highcharts.theme.textColor) || 'gray' } } }, legend: { align: 'right', x: -70, verticalAlign: 'top', y: 20, floating: true, backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || 'white', borderColor: '#CCC', borderWidth: 1, shadow: false }, tooltip: { formatter: function() { return '<b>'+ this.x +'</b><br/>'+ this.series.name +': '+ this.y +'<br/>'+ 'Total: '+ this.point.stackTotal; } }, colors: ['#FFCC99','#3366CC'], plotOptions: { column: { stacking: 'normal', dataLabels: { enabled: true, color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white', style: { textShadow: '0 0 3px black, 0 0 3px black' } } } }, series: [{ name: 'Sold', data: [0, 0] }, { name: 'Available', data: [20, 20] }] }); }); </script> ``` Intially the number of tickets is 20, but as soon as I post data using curl, the number of sold tickets should increase and available tickets should decrease, depending on the event. How do I go about?

Original source