PHP JSON Highcharts load database result

前端 未结 2 2002
醉梦人生
醉梦人生 2021-01-14 10:38

I\'m stuck!

I need to create highchart with json result. I found some sources here but can\'t put this to work.

The closest I can get was doing this:

相关标签:
2条回答
  • 2021-01-14 11:18

    In your ajax call -

    $.getJSON('ajax/calc.ajax.php', function(data) {
        var series = []; // <---------------------- must be object not array
        $.each(data, function(key, value) {
            series.name = key;
            series.data = value;
            options.series.push(name); // <-------- it should be series not name
        });
        var chart = new Highcharts.Chart(options);  
    });
    

    So, it would be as follows -

    $.getJSON('ajax/calc.ajax.php', function(data) {        
        $.each(data, function(key, value) {
            var series = {}; // <-------------------- moved and changed to object
            series.name = key;
            series.data = value;
            options.series.push(series); // <-------- pushing series object
        });
        var chart = new Highcharts.Chart(options);  
    });
    

    Also, considering the JSON you are receiving -

    {"nome":"TRANSFORMADOR 250VA 0-230-380V / 0,24V-0-48V","modelo":"TRANSFORMADOR","marca":"SEIT","valor":"318.87|542.08","qtdade":"0"??}

    what you are doing in the $.each -

    series.data = value;
    

    does not make sense.

    series.data is an array. So, it could look like either as follows -

    [y1, y2, y3, ....] // array of numbers (which are y values)
    

    or as follows -

    [[x1, y1], [x2, y2], [x3, y3], ....] // array of arrays of pair of numbers (x and y values)
    

    or as follows -

    // array of objects which can have x and y values as properties
    [{                       
        name: 'Point 1',
        color: '#00FF00',
        y: 0
    }, {
        name: 'Point 2',
        color: '#FF00FF',
        y: 5
    }]
    

    So, make sure that your PHP code produces a JSON that matches an array of one of the above, then series.data = value inside your $.each will work.

    Update: Sorry, I do Java and have never done PHP so can't help you much with PHP. But, can you try with the following as your PHP, just to see if the chart shows up?

    header('Content-Type: application/json');
    $return_data = array(
        array(array(10, 20), array(20, 30), array(56, 30), array(50, 20)),
        array(array(10, 0), array(20, 10), array(56, 100), array(50, 40))
    );
    echo json_encode($return_data);
    

    Update: To render pie while keeping the same PHP.

    $.getJSON('ajax/calc.ajax.php', function(data) {        
        var series = { // <-------------------- create just one series object
            type: 'pie',
            data: [] //data array for new series
        }; 
        $.each(data, function(key, value) {
            series.data.push([key, value[0]]);            
        });
        options.series.push(series); // <-------- pushing series object
        var chart = new Highcharts.Chart(options);  
    });
    

    This should draw pie chart.

    0 讨论(0)
  • 2021-01-14 11:28

    It looks like the problem lies in your PHP code. Highcharts expects a series to follow a particular format. In your case, things work out (partly) because name is one of the field it is looking for. The data, however, needs to be in one of three formats:

    • An array of y values (e.g. [0, 1, 2])
    • An array of arrays (x, y values; e.g. [[0,0], [1,1], [2,2]])
    • An array of objects meeting using point properties

    You would want the last format, I think. For example:

    var series = [];
    series.name = "series1";
    series.data = {y: 10}; //very minimalistic example of the object format
    options.series.push(name);
    

    To get your code to work, you might need to change the inside of your $.each function to something like this:

    $.each(data, function(key, value) {
        series.name = key;
    
        series.data = {
            y: value.property_you_are_interested_in
        };
    
        options.series.push(name);
    });
    

    ...of course, if you wanted to use one of the other forms, it would be pretty easy as well:

    //First form (array of y values)
    var series = {};
    series.data = [];
    $.each(data, function(key, value) {
        series.name = key;
        series.data.push(value.property_you_are_interested_in);
    });
    options.series.push(series);
    
    //Second form (array of x, y values)
    var series = {};
    series.data = [];
    $.each(data, function(key, value) {
        series.name = key;
        series.data.push([value.X_property_you_are_interested_in, value.Y_property_you_are_interested_in]);
    });
    options.series.push(series);
    
    0 讨论(0)
提交回复
热议问题