Как интегрировать данные из Ajax в chart.js

У меня следующая проблема. Я хотел бы интегрировать данные, которые я получаю из ответа http, в свои диаграммы charts.js.

Я получаю данные через Ajax от конечной точки api, которая работает нормально. Еще у меня есть скрипт для графиков chart.js. Но я просто не могу совмещать эти два сценария.

В настоящее время я не знаю, где и как разместить сценарий Ajax. Стоит ли копировать в charts-custom.js? Я пробовал несколько способов, но ничего не вышло.

У меня мало опыта работы с javascript и ajax.

Я был бы очень признателен, если бы кто-нибудь мог просмотреть мой код и помочь мне интегрировать код ajax с chart.js.

Большое спасибо и добрые пожелания

У меня есть следующие файлы:

charts.html -> весь код html charts-custom.js -> функции javascript для диаграмм

var endpoint = '/algorithmicTrading/api/portfolioData/data/'

var chartData = []
var chartLabels = []

$.ajax({
    method: "GET",
    url: endpoint,
    success: function(data){

        portfolioInstruments = data.portfolioInstruments
        absolutPositionValues = data.absolutPositionValues
        percentagePositionWeights = data.percentagePositionWeights


        setChart()
    },
    error: function(error_data){
        console.info("error")
        console.info(error_data)
    }
})

/*global $, document*/
$(document).ready(function setChart(data) {

    'use strict';

    Chart.defaults.global.defaultFontColor = '#75787c';



    // ------------------------------------------------------- //
    // Bar Chart Custom 1
    // ------------------------------------------------------ //
    var BARCHART1 = $('#barChartCustom1');
    var barChartHome = new Chart(BARCHART1, {
        type: 'bar',
        options:
        {
            scales:
            {
                xAxes: [{
                    display: true,
                    barPercentage: 0.2
                }],
                yAxes: [{
                    ticks: {
                        max: 100,
                        min: 0
                    },
                    display: false
                }],
            },
            legend: {
                display: false
            }
        },
        data: {
            labels: portfolioInstruments,
            datasets: [
                {
                    label: "Data Set 1",
                    backgroundColor: [
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99'
                    ],
                    borderColor: [
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99',
                        '#EF8C99'
                    ],
                    borderWidth: 0.3,
                    data: absolutPositionValues
                }
            ]
        }
    });

Кажется, вы действительно близки, вам следует реализовать setChart (data), где он берет ваш ответ ajax и переводит его в формат, понятный charts.js. --- чтобы использовать этот пример с charts.js, реализуйте его в новой функции с именем setChart.

Cody G 30.03.2018 14:12

спасибо, я переименовал функцию, но, к сожалению, она все еще не работает. Допустимо ли вставлять скрипт ajax над функцией chart.js?

Marcel 30.03.2018 14:32

Таким образом, в javascript вы можете объявить такую ​​функцию, как function setChart(data){}, и она вытянет ее на вершину текущего function(){}, который находится внутри. Итак, чтобы ответить на ваш вопрос, да, если функция setChart находится вне $(document).ready(function(){})

Cody G 30.03.2018 14:38

Теперь есть исключение, если вы укажете свою функцию как var setChart = function(data){};, тогда переменная setChart будет undefined, пока не достигнет строки, где она указана.

Cody G 30.03.2018 14:39
gist.github.com/dancameron/18ad7e46399406259323 --- Вот пример того, как кто-то делает то, что вы хотите, хотя мне не нравится, как они объявили свою переменную invoice_status_data ... также jquery 3+ использует .done и .fail вместо "успех" и "ошибка
Cody G 30.03.2018 14:46

Большое спасибо за вашу помощь, но я до сих пор не знаю, как это исправить. Я изменил исходное сообщение на текущее состояние charts-custom.js. Не могли бы вы, пожалуйста, дайте мне знать, что нужно изменить, чтобы это работало

Marcel 30.03.2018 14:49

Я опубликовал незаконченное решение, главным образом потому, что я не могу протестировать вашу конечную точку, но я рассказал вам, как мне начать.

Cody G 30.03.2018 15:04

конечную точку можно найти здесь 165.227.152.128/algorithmicTrading/api/portfolioData/data что я мог бы сделать для вас, если бы вы запустили это?

Marcel 30.03.2018 15:27

Я отредактировал опубликованный мной код, используя общедоступный MDN HTTPS API. Я не могу вызвать конечную точку HTTP с HTTPS (и вы тоже!). примечание: ваша диаграмма должна быть canvas note2: $chart[0] получает элемент DOM вместо объекта jquery, чтобы вы могли вызвать getContext --- который доступен для элементов canvas.

Cody G 30.03.2018 17:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
3 583
1

Ответы 1

'use strict';
var endpoint = 'https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json'

function setChart(data){
    var portfolioInstruments = data.members.map(e=>e.name);
    var absolutPositionValues = data.members.map(e=>e.age);
    var percentagePositionWeights = data.percentagePositionWeights;
    Chart.defaults.global.defaultFontColor = '#75787c';
    // ------------------------------------------------------- //
    // Bar Chart Custom 1
    // ------------------------------------------------------ //
    var $chart = $('#barChartCustom1');
    var barChartHome = new Chart($chart[0].getContext("2d"), {
        type: 'bar',
        options: {
            scales: {
                xAxes: [{ display: true, barPercentage: 0.2 }],
                yAxes: [{ ticks: { max: 100, min: 0 }, display: false }],
            },
            legend: { display: false }
        },
        data: {
            labels: portfolioInstruments,
            datasets: [
                {
                    label: "Data Set 1",
                    backgroundColor: [  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99'],
                    borderColor: [  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99',  '#EF8C99'],
                    borderWidth: 0.3,
                    data: absolutPositionValues
                }
            ]
        }
    })
}

$.ajax({
    method: "GET",
    url: endpoint,
    success: function(data){
        setChart(data);
    },
    error: function(error_data){
        console.info("Endpoint GET request error");
        // console.info(error_data)
    }
})

$(document).ready(function () {

});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
<canvas id = "barChartCustom1"></canvas>

Другие вопросы по теме