Как несколько запросов к апи, сделать одним запросом jquery?

113
20 февраля 2021, 19:20

Делаю дашборд, на странице 12 графиков, и 12 названий этих графиков. 24 requests, 981 kb transfered, 9.5 resources, finish: 31.36s. Сам код примерно такой и так к каждому графику. Как можно уменьшить количество запросов?

<script>
    $(document).ready(function() {
        $.ajax({
            url: '/api/dashboard/second',
            success: function(json) {
                var name = [];
                for (index = 0; index < json.data.length; ++index) {
                    if(json.data[index]['graphId'] == 5) {
                        for (i = 0; i < json.data[index]['values'].length; ++i) {
                            if(name.indexOf(json.data[index]['values'][i]['x']) == -1)
                                name.push(json.data[index]['values'][i]['x']);
                        }
                    }
                    document.getElementById("text-1").innerHTML = name;
                }
            }
        });
    });
    $(document).ready(function() {
        $.ajax({
            url: '/api/dashboard/second',
            success: function(json) {
                var name = [];
                for(index = 0; index < json.data.length; ++index) {
                    if(json.data[index]['graphId'] == 5) {
                        for(i = 0; i < json.data[index]['values'].length; ++i) {
                            if(name.indexOf(json.data[index]['values'][i]['x']) == -1)
                                name.push(json.data[index]['values'][i]['x']);
                        }
                    }
                    document.getElementById("text-1").innerHTML = name;
                }
            }
        });
    });
    $(document).ready(function() {
        $.ajax({
            url: '/api/dashboard/second',
            success: function(json) {
                var name = [];
                for(index = 0; index < json.data.length; ++index) {
                    if(json.data[index]['graphId'] == 3) {
                        for(i = 0; i < json.data[index]['values'].length; ++i) {
                            if(name.indexOf(json.data[index]['values'][i]['x']) == -1)
                                name.push(json.data[index]['values'][i]['x']);
                        }
                    }
                    document.getElementById("text-2").innerHTML = name;
                }
            }
        });
    });
    $(document).ready(function() {
        $.ajax({
            url: '/api/dashboard/second',
            success: function(json) {
            var name = [];
                for(index = 0; index < json.data.length; ++index) {
                    if(json.data[index]['graphId'] == 4) {
                        for(i = 0; i < json.data[index]['values'].length; ++i) {
                            if(name.indexOf(json.data[index]['values'][i]['x']) == -1)
                                name.push(json.data[index]['values'][i]['x']);
                        }
                    }
                    document.getElementById("text-3").innerHTML = name;
                }
            }
        });
    });
</script>

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            url: '/api/dashboard/second',
            success: function(json) {
                var data = [];
                for(index = 0; index < json.data.length; ++index) {
                    if(json.data[index]['graphId'] == 5) {
                        for(i = 0; i < json.data[index]['values'].length; ++i) {
                            data.push(json.data[index]['values'][i]['value']);
                        }
                    }
                }
                Chart.defaults.global.defaultFontColor = 'black';
                Chart.defaults.global.defaultFontFamily = 'Verdana';
                var ctx = document.getElementById("pie-chart-1");
                var myChart = new Chart(ctx, {
                    type: 'pie',
                    data: {
                        labels: ["Расходы", "Доходы"],
                        datasets: [{
                            backgroundColor: ["#3e95cd", "#8e5ea2", "#3cba9f", "#e8c3b9", "#c45850"],
                            data: data
                        }]
                    },
                    options: {
                        legend: {
                            position: "left",
                            display: true,
                        },
                        plugins: {
                            datalabels: {
                                fontColor: 'black',
                            }
                        }
                    }
                });
            }
        });
    });
</script>
Answer 1

Сделайте, чтоб API по запросу /api/dashboard/graphics возвращало сразу данный всех графиков типа такого:

{
    "response": [
        {
            "graphId": '1',
            "data": [1, 2, 3, 4, 5, 6],
            "labels": [12, 14, 16, 18, 20, 22]
        },
        {
            "graphId": '2',
            "data": [1, 3, 5, 7],
            "labels": [14, 15, 16, 17]
        },
        {
            ...
        }
    ],
}

Кстати, советую использовать вместо простого for'а for...of или forEach

READ ALSO
Проблема с якорем

Проблема с якорем

При переходе по якорной ссылке к якорю в меню "iPhone" отрезаются все блоки сверхуКто сталкивался с данной проблемой и как можно решить? Cсылка...

133
Проблема с формированием JSON в webAPI ASP.Net

Проблема с формированием JSON в webAPI ASP.Net

Стоит задача создания уникальных переменных, которые будут содеражать в себе настройки сервераЗадумывается так, что эти переменные можно...

126
WPF MVVM - Смена UserControl в одном окне

WPF MVVM - Смена UserControl в одном окне

Есть пару UserControl: AuthControl и CalculateControlДля этих контролов есть ViewModel: AuthViewModel

126