javascript - Chart.js passing value data dynamic - Stack Overflow

I am want to use data and level dynamic by ajax, so i am using as below but not working.My ajax return

I am want to use data and level dynamic by ajax, so i am using as below but not working.

My ajax return data in json_encode of php. My code is:

success: function (result) {
           result = JSON.parse(result);
           var labels = result['labels'];
           var data = result['data'];
           //console.log(data);
           var ctx = document.getElementById("chartbtc");
           var myChart = new Chart(ctx, {
                    type: 'line',
                    data: {
                        labels: [labels],
                        datasets: [{
                            label: 'Market Price (USD)',
                            data: [data],
                            backgroundColor: [
                                'rgba(255, 99, 132, 0.2)',
                                'rgba(54, 162, 235, 0.2)',
                                'rgba(255, 206, 86, 0.2)',
                                'rgba(75, 192, 192, 0.2)',
                                'rgba(153, 102, 255, 0.2)',
                                'rgba(255, 159, 64, 0.2)'
                            ],
                            borderColor: [
                                'rgba(255,99,132,1)',
                                'rgba(54, 162, 235, 1)',
                                'rgba(255, 206, 86, 1)',
                                'rgba(75, 192, 192, 1)',
                                'rgba(153, 102, 255, 1)',
                                'rgba(255, 159, 64, 1)'
                            ],
                            borderWidth: 1
                        }]
                    },
                    options: {
                        responsive: true,
                        maintainAspectRatio: false,
                        scales: {
                            yAxes: [{
                                ticks: {
                                    beginAtZero: false
                                }
                            }]
                        }
                    }
                });
        }

But chart is not generating:

Ajax result is:

{"labels":"13-Nov-2017, 14-Nov-2017, 15-Nov-2017, 16-Nov-2017, 17-Nov-2017, 18-Nov-2017, 19-Nov-2017, 20-Nov-2017, 21-Nov-2017, 22-Nov-2017, 23-Nov-2017, 24-Nov-2017, 25-Nov-2017, 26-Nov-2017, 27-Nov-2017, 28-Nov-2017, 29-Nov-2017, 30-Nov-2017, 01-Dec-2017, 02-Dec-2017, 03-Dec-2017, 04-Dec-2017, 05-Dec-2017, 06-Dec-2017, 07-Dec-2017, 08-Dec-2017, 09-Dec-2017, 10-Dec-2017, 11-Dec-2017, 12-Dec-2017","data":"6550.22, 6635.41, 7301.42, 7815.03, 7786.88, 7817.14, 8007.65, 8255.59, 8059.8, 8268.03, 8148.94, 8250.97, 8707.4, 9284.14, 9718.29, 9952.5, 9879.32, 10147.37, 10883.91, 11071.36, 11332.62, 11584.82, 11878.43, 13540.98, 16501.97, 16007.43, 15142.83, 14869.8, 16762.11, 17276.39"}

I am want to use data and level dynamic by ajax, so i am using as below but not working.

My ajax return data in json_encode of php. My code is:

success: function (result) {
           result = JSON.parse(result);
           var labels = result['labels'];
           var data = result['data'];
           //console.log(data);
           var ctx = document.getElementById("chartbtc");
           var myChart = new Chart(ctx, {
                    type: 'line',
                    data: {
                        labels: [labels],
                        datasets: [{
                            label: 'Market Price (USD)',
                            data: [data],
                            backgroundColor: [
                                'rgba(255, 99, 132, 0.2)',
                                'rgba(54, 162, 235, 0.2)',
                                'rgba(255, 206, 86, 0.2)',
                                'rgba(75, 192, 192, 0.2)',
                                'rgba(153, 102, 255, 0.2)',
                                'rgba(255, 159, 64, 0.2)'
                            ],
                            borderColor: [
                                'rgba(255,99,132,1)',
                                'rgba(54, 162, 235, 1)',
                                'rgba(255, 206, 86, 1)',
                                'rgba(75, 192, 192, 1)',
                                'rgba(153, 102, 255, 1)',
                                'rgba(255, 159, 64, 1)'
                            ],
                            borderWidth: 1
                        }]
                    },
                    options: {
                        responsive: true,
                        maintainAspectRatio: false,
                        scales: {
                            yAxes: [{
                                ticks: {
                                    beginAtZero: false
                                }
                            }]
                        }
                    }
                });
        }

But chart is not generating:

Ajax result is:

{"labels":"13-Nov-2017, 14-Nov-2017, 15-Nov-2017, 16-Nov-2017, 17-Nov-2017, 18-Nov-2017, 19-Nov-2017, 20-Nov-2017, 21-Nov-2017, 22-Nov-2017, 23-Nov-2017, 24-Nov-2017, 25-Nov-2017, 26-Nov-2017, 27-Nov-2017, 28-Nov-2017, 29-Nov-2017, 30-Nov-2017, 01-Dec-2017, 02-Dec-2017, 03-Dec-2017, 04-Dec-2017, 05-Dec-2017, 06-Dec-2017, 07-Dec-2017, 08-Dec-2017, 09-Dec-2017, 10-Dec-2017, 11-Dec-2017, 12-Dec-2017","data":"6550.22, 6635.41, 7301.42, 7815.03, 7786.88, 7817.14, 8007.65, 8255.59, 8059.8, 8268.03, 8148.94, 8250.97, 8707.4, 9284.14, 9718.29, 9952.5, 9879.32, 10147.37, 10883.91, 11071.36, 11332.62, 11584.82, 11878.43, 13540.98, 16501.97, 16007.43, 15142.83, 14869.8, 16762.11, 17276.39"}
Share Improve this question edited Dec 13, 2017 at 16:19 Shiv Singh asked Dec 13, 2017 at 16:02 Shiv SinghShiv Singh 7,2413 gold badges41 silver badges51 bronze badges 2
  • do you get any errors in your browser console? If you put a console.log("testing"); just before var myChart... does it get printed? – N. Ivanov Commented Dec 13, 2017 at 16:05
  • testing is showing on console – Shiv Singh Commented Dec 13, 2017 at 16:06
Add a ment  | 

3 Answers 3

Reset to default 2

Since you have provided your ajax result, this will not work with the chart generation. In your case result["labels"] is a string and you are just making a list with 1 element which is the whole string(which is not valid for the labels property and will not work). What you should do is split the string, format it correctly and then supply it as a list to the labels property. Easiest way would be to use the split() function, and in your case you could split by ", ". Although I would remend to implement a better response if its possible (have it something like so: {"labels": ["13-Nov-2017", "14-Nov-2017", ...]}).

Hope this helps!

For the first time you can fill the chart with your own value, but when it is ing for dynamically appending data then you should remove the canvas element and regenerate it. So that your data will get appended dynamically on chart.

You can try something like this.

<canvas id="chartbtc" class="canvasChart"></canvas>

<script>

    dynamicDataAppendOnChart(labels, data); // On page loading you will be having your own data so you can pass them, or if you want that to be happen with ajax when page loading itself you can trigger the click event.

    $('#btnClick').trigger('click');

    // You will be calling the function with click event...
    $('#btnClick').on('click', function () {
        var data = '', labels = '';
        $.ajax({
            url: url,
            type: "POST",
            data: data,
            async: isAsync,
            success: function (result) {
               result = JSON.parse(result);
               labels = result['labels'];
               data = result['data'];
            }
        });
        dynamicDataAppendOnChart(labels, data); // Now you can call the function by passing labels and data
    });

    function dynamicDataAppendOnChart() {
        $('#chartbtc').remove();
        $('#appendTheCanvasElement').append('<canvas id="chartbtc" class="canvasChart"><canvas>'); // This would create new canvas element every time and removes the older one.
        var ctx = document.getElementById("chartbtc");
        var myChart = new Chart(ctx, {
            type: 'line',
            data: {
                labels: [labels],
                datasets: [{
                    label: 'Market Price (USD)',
                    data: [data],
                    backgroundColor: [
                        'rgba(255, 99, 132, 0.2)',
                        'rgba(54, 162, 235, 0.2)',
                        'rgba(255, 206, 86, 0.2)',
                        'rgba(75, 192, 192, 0.2)',
                        'rgba(153, 102, 255, 0.2)',
                        'rgba(255, 159, 64, 0.2)'
                    ],
                    borderColor: [
                        'rgba(255,99,132,1)',
                        'rgba(54, 162, 235, 1)',
                        'rgba(255, 206, 86, 1)',
                        'rgba(75, 192, 192, 1)',
                        'rgba(153, 102, 255, 1)',
                        'rgba(255, 159, 64, 1)'
                    ],
                    borderWidth: 1
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero: false
                        }
                    }]
                }
            }
        });
    }
</script>

Try This. Declare label and data as

var labels = result['labels'].split(","); // Return Array of Strings Of labels
var data =   JSON.parse("[" +  result['data'] + "]");// return array of data

Chage

labels: [labels],
data: [data],

to

labels: labels,
    data: data,

Because it already in array

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745217186a4617081.html

相关推荐

  • javascript - Chart.js passing value data dynamic - Stack Overflow

    I am want to use data and level dynamic by ajax, so i am using as below but not working.My ajax return

    3小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信