Kaip siųsti duomenis „JavaScript“ iš AJAX sėkmės iškvietimo į Chart.js

AJAX

Suprasti duomenų tvarkymą nuo AJAX iki Chart.js

Asinchroninių duomenų tvarkymas yra dažnas sunkumas pradedantiesiems, kuriant dinamines internetines programas, ypač naudojant „JavaScript“. Bandant įtraukti išorinius duomenis į vizualizacijos sistemą, pvz., Chart.js, ši problema tampa sudėtingesnė. Viena tipiška situacija yra AJAX iškvietimas norint gauti orų duomenis, kurie vėliau perduodami kitai funkcijai grafiniam atvaizdavimui.

Idealus būdas gauti duomenis iš serverio yra sėkmingas AJAX atgalinis skambutis. Tačiau tikrasis sunkumas yra perkelti šiuos duomenis į kitas „JavaScript“ operacijas ar procedūras, pavyzdžiui, diagramos kūrimą. Iš pradžių šio srauto suvokimas gali atrodyti bauginantis ką nors, kas nėra susipažinęs su JavaScript.

Šiame vadove žingsnis po žingsnio išskirsime procedūrą. Siekdami dinamiškai generuoti diagramą su etiketėmis ir duomenų taškais iš serverio, apžvelgsime, kaip gauti duomenis naudojant AJAX, juos išanalizuoti ir teisingai nusiųsti tuos duomenis į Chart.js. Taikydami šį metodą įgysite efektyvaus asinchroninių duomenų tvarkymo kompetencijos.

Perskaitę šią pamoką, turėtumėte turėti galimybę perduoti orų duomenis į diagramų biblioteką, kad galėtumėte vizualiai pavaizduoti, ne tik žinoti, kaip juos gauti per AJAX. Dabar pradėkime taisyti!

komandą Naudojimo pavyzdys
$.ajax() Tai būdas asinchroninėms HTTP užklausoms siųsti naudojant „jQuery“. Pavyzdyje jis naudojamas meteorologinei informacijai iš serverio gauti. Jo sėkmingas atgalinis skambutis valdo atsakymą ir palaiko daugybę HTTP metodų, įskaitant GET ir POST.
JSON.parse() Sukuria „JavaScript“ objektą iš JSON eilutės. Šiuo atveju jis paverčia iš serverio atsiųstą orų informaciją į objektą, kad scenarijus galėtų pasiekti laiko ir temperatūros matricas, kurios yra įdėtos.
Chart() Naudojant Chart.js paketą, šis scenarijus sukuria naują diagramą nuo nulio. Jame aprašomi duomenys (etiketės ir duomenų rinkiniai), diagramos tipas (pvz., „linija“) ir nustatymų pasirinkimai. Jis naudojamas pavyzdyje sukurti linijinę diagramą, kurioje temperatūros duomenys rodomi kaip laiko funkcija.
context('2d') Gauna drobės elemento 2D atvaizdavimo kontekstą. Norint nubrėžti diagramą ant drobės elemento, ši komanda reikalinga. Tai leidžia grafinius elementus pateikti naudojant Chart.js.
fetch() Šiuolaikinė „JavaScript“ API, skirta tinklų užklausoms teikti, vadinama „Fetch“. Asinchronizavimo / laukimo metodas naudoja labiau supaprastintą ir efektyvesnį asinchroninį kodą, kad būtų galima gauti duomenis iš serverio nereikalaujant atgalinio skambinimo, pakeičiant $.ajax().
async/await Palyginti su skambučiais ar pažadais, šios komandos yra veiksmingesnės tvarkant asinchronines operacijas. Pavyzdyje pateikiamas aiškesnis asinchroninių duomenų apdorojimo srautas, naudojant async asinchroninei funkcijai deklaruoti ir laukti, kol bus sustabdytas vykdymas, kol bus įvykdytas pažadas „fetch()“.
.then() Ši technika taikoma pažadams ir yra susijusi su pažado priėmimo arba atmetimo valdymu. Sėkmingai nuskaičius orų duomenis, modulinis metodas juos apdoroja ir siunčia diagramos atvaizdavimo funkcijai.
.catch() Adresai žada klaidų. Kad būtų užtikrintas patikimas klaidų tvarkymas kode, scenarijaus pavyzdys aptinka visas problemas, susijusias su „loadSkiResortData()“ pažadu, pvz., tinklo gedimus, ir konsolėje registruoja klaidos pranešimą.
beginAtZero Ši Chart.js parinktis užtikrina, kad diagramoje būtų tinkamai rodomos žemesnės temperatūros vertės, priverčiant Y ašį pradėti nuo nulio. Tai ypatingas diagramos sąrankos nustatymas, pagerinantis duomenų rodymo aiškumą.

AJAX duomenų srauto suskaidymas JavaScript

Pirmiau minėti scenarijai parodo, kaip gauti ir perduoti duomenis iš sėkmingo AJAX atgalinio skambinimo kitai funkcijai – šiuo atveju duomenims pavaizduoti naudojant Chart.js. Procedūra prasideda AJAX iškvietimu, kuris pateikia GET užklausą serverio galutiniam taškui naudojant metodas iš jQuery. Šiuo atveju oro duomenis teikia galutinis taškas. Atsakymas pateikiamas JSON formatu, kuris metodas naudojamas analizuoti į JavaScript objektą. Tai svarbus žingsnis, nes jis leidžia dirbti su duomenimis, kuriuos gauname iš serverio. Pavyzdžiui, galime išgauti valandines temperatūros ir laiko reikšmes ir panaudoti tuos duomenis duomenims, pateikiamiems į Chart.js egzempliorių, pakeisti.

Tada scenarijus pereina į atgalinio skambučio metodas, kai duomenys apie orą įrašomi į konsolę, kad būtų galima derinti, kai duomenys buvo sėkmingai nuskaityti ir išanalizuoti. Siekiant užtikrinti, kad būtų gaunami tinkami duomenys, tai yra standartinė kuriama procedūra. Mes vadiname funkcija, patikrinusi duomenų tikslumą, pateikdama laiko masyvą ir temperatūros masyvą kaip dvi esmines duomenų dalis. Šis metodas parodo, kaip labai svarbu naudoti modulines funkcijas, kad būtų išlaikytas kodo organizavimas ir pakartotinis naudojimas.

Paskutinis veiksmas naudojant Chart.js duomenims vizualizuoti yra funkcija. Tam reikia panaudoti funkcija, kad pirmiausia gautumėte 2D elemento 2D atvaizdavimo kontekstą. Drobė paruošta grafikos atvaizdavimui naudojant šį būdą. Vėliau sukuriamas naujas diagramos objektas, o jo konfigūracija nustatoma taip, kad būtų nustatyti duomenys, kurie turi būti rodomi kartu su diagramos tipu (šiuo atveju „linija“). Duomenų rinkinys, kuriame yra temperatūros rodmenys, yra nustatytas pagal temperatūros vertes, paimtas iš serverio atsako, o etiketės diagramoje nustatomos pagal laiko reikšmes, gautas iš AJAX skambučio.

Galiausiai į kiekvieną sprendimą įtraukėme klaidų apdorojimą, kad įsitikintume, jog tuo atveju, jei AJAX užklausa nepavyktų, konsolėje būtų užregistruotas pranešimas. Tai būtina kuriant patikimas žiniatinklio programas, nes tai leidžia kūrėjams nustatyti galimas problemas prieš tai paveikiant vartotoją. Šiuolaikiniai metodai, tokie kaip pažadai ir padėti AJAX iškvietimų asinchroniškumą padaryti įskaitomesnį ir valdomesnį. Palyginti su įprastu daug atgalinio skambinimo kodu, šie metodai yra efektyvesnis ir aiškesnis būdas gauti duomenis ir generuoti diagramas.

1 sprendimas: AJAX duomenų perdavimas į Chart.js naudojant atgalinius skambučius

Šis metodas pateikia diagramą naudojant Chart.js ir naudoja jQuery, skirtą AJAX. Atgaliniai skambučiai naudojami sprendime norint perkelti duomenis iš AJAX sėkmės metodo į kitą funkciją.

$(document).ready(function() {
    loadSkiResortData();
});

function loadSkiResortData() {
    $.ajax({
        method: 'GET',
        url: '/admin/sknowed/loadSkiResortData',
        success: function(response) {
            const obj = JSON.parse(response.weatherData);
            const temperatures = obj.hourly.temperature_2m;
            const times = obj.hourly.time;
            renderChart(times, temperatures);
        },
        error: function() {
            console.error('Failed to load data');
        }
    });
}

function renderChart(labels, data) {
    const ctx = document.getElementById('myChart').getContext('2d');
    new Chart(ctx, {
        type: 'line',
        data: {
            labels: labels,
            datasets: [{
                label: 'Temperature Over Time',
                data: data,
                borderWidth: 1
            }]
        },
        options: {
            responsive: true,
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
}

2 sprendimas: modulinis požiūris su pažadais

Taikant šį metodą, kodas moduliuojamas, o duomenys iš AJAX sėkmės tvarkyklės perduodami naudojant JavaScript pažadus, o ne atgalinius skambučius. Dėl to užtikrinamas geresnis skaitomumas ir lankstumas.

$(document).ready(function() {
    loadSkiResortData()
        .then(data => {
            const { temperature_2m, time } = data.hourly;
            renderChart(time, temperature_2m);
        })
        .catch(error => console.error('Error loading data:', error));
});

function loadSkiResortData() {
    return new Promise((resolve, reject) => {
        $.ajax({
            method: 'GET',
            url: '/admin/sknowed/loadSkiResortData',
            success: function(response) {
                const data = JSON.parse(response.weatherData);
                resolve(data);
            },
            error: function(error) {
                reject(error);
            }
        });
    });
}

function renderChart(labels, data) {
    const ctx = document.getElementById('myChart').getContext('2d');
    new Chart(ctx, {
        type: 'line',
        data: {
            labels: labels,
            datasets: [{
                label: 'Temperature Over Time',
                data: data,
                borderWidth: 1
            }]
        },
        options: {
            responsive: true,
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
}

3 sprendimas: naudokite Fetch API su Async / Await

Šis metodas naudoja asinchronizavimą / laukimą asinchroniniams duomenims tvarkyti ir pakeičia jQuery AJAX naujesne Fetch API. Dėl tvirtumo taip pat įtrauktas klaidų apdorojimas.

document.addEventListener('DOMContentLoaded', async () => {
    try {
        const data = await loadSkiResortData();
        const { temperature_2m, time } = data.hourly;
        renderChart(time, temperature_2m);
    } catch (error) {
        console.error('Error loading data:', error);
    }
});

async function loadSkiResortData() {
    const response = await fetch('/admin/sknowed/loadSkiResortData');
    if (!response.ok) {
        throw new Error('Network response was not ok');
    }
    const result = await response.json();
    return JSON.parse(result.weatherData);
}

function renderChart(labels, data) {
    const ctx = document.getElementById('myChart').getContext('2d');
    new Chart(ctx, {
        type: 'line',
        data: {
            labels: labels,
            datasets: [{
                label: 'Temperature Over Time',
                data: data,
                borderWidth: 1
            }]
        },
        options: {
            responsive: true,
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
}

„JavaScript“ duomenų tvarkymo tyrinėjimas naudojant AJAX ir Chart.js

Viena iš pagrindinių problemų, su kuria kūrėjai dažnai susiduria dirbdami su „JavaScript“ ir AJAX, yra tai, kaip efektyviai perkelti duomenis tarp asinchroninių funkcijų ir metodų. Kadangi AJAX pagal dizainą yra asinchroninis, ne visada galite numatyti, kada duomenys bus pasiekiami. Dėl to gali būti sunkiau naudoti tuos duomenis kitose programos srityse, pvz., kai siunčiate juos į biblioteką vizualizuoti, pvz., . Atgaliniai skambučiai ir modulinės funkcijos yra gerai organizuoti būdai valdyti šį srautą ir užtikrinti, kad duomenys būtų perduodami teisingai.

Kitas svarbus metodas yra naudoti ir Pažadai. Pažadai užtikrina, kad duomenys būtų tvarkomi tik sėkmingai įvykdžius AJAX užklausą, o tai padeda efektyviau valdyti duomenų srautą. Tai sumažina labai įdėtų atgalinių skambučių, kartais vadinamų „atskambinimo pragaru“, poreikį ir pagerina kodo skaitomumą. Kūrėjai gali suspausti asinchroninį kodą į sinchroninę struktūrą naudodami async/laukti, todėl duomenų tvarkymo procesas yra daug lengviau suprantamas ir derinamas.

Klaidų valdymas yra toks pat svarbus šiuolaikiniam JavaScript kaip duomenų rinkimas ir perdavimas. Būtina įtraukti atitinkamus klaidų valdymo būdus, pvz , jūsų asinchronizavimo funkcijose. Taip užtikrinama, kad programa nesustrigtų, jei įvyktų duomenų gavimo proceso gedimas (tokios tinklo problemos ar serverio sunkumai). Klaidų pranešimai aptinkami ir tvarkomi gražiai, o ne sugenda visa programa, kartais net įspėjant vartotoją apie problemą.

  1. Kaip perduoti AJAX duomenis kitai funkcijai?
  2. Norėdami siųsti duomenis kitu būdu, naudokite atgalinio skambinimo funkciją AJAX skambučio tvarkytojas.
  3. Koks yra vaidmuo tvarkant serverio duomenis?
  4. Kad būtų lengviau apdoroti duomenis, paverčia serverio JSON eilutės atsaką į JavaScript objektą.
  5. Kaip galiu tvarkyti klaidas AJAX skambučio metu?
  6. Norėdami efektyviai valdyti klaidas, naudokite a blokas a paprašykite arba naudokite perskambinimas AJAX.
  7. Kaip įsitikinti, kad diagramoje atnaujinti dinaminiai duomenys?
  8. Pridėję naujų etikečių ar duomenų skambinkite ant tavo objektas atnaujinti diagramą naujausiomis reikšmėmis.
  9. Kaip veikia padėti su AJAX užklausomis?
  10. Dėl to asinchroninis kodas atrodo labiau sinchroniškas, todėl pagerėja skaitomumas ir AJAX skambučių klaidų apdorojimas.

Kuriant dinamines internetines programas, būtinas duomenų perdavimas iš AJAX sėkmės funkcijos į kitas kodo dalis. Galite užtikrinti švarų, daugkartinį kodą ir pagreitinti šį procesą naudodami modulines funkcijas.

Be to, kūrėjai gali geriau valdyti asinchroninius duomenis naudodami tokias strategijas kaip ir , kurios pagerina skaitomumą ir priežiūrą. Teisingai pašalinus klaidas sprendimas tampa patikimas ir paprastas naudoti.

  1. Plėtojamas AJAX užklausas jQuery ir pateikiamas visas asinchroninio JavaScript programavimo suskirstymas. Išsamesnių pavyzdžių galite rasti adresu jQuery AJAX dokumentacija .
  2. Siūloma išsami dokumentacija, kaip naudoti Chart.js duomenims vizualizuoti, įskaitant dinaminių duomenų rinkinių ir diagramos konfigūracijų nustatymą: Chart.js dokumentacija .
  3. Pateikiamas išsamus „JavaScript“ gavimo API ir jos naudojimo su „Promises“ asinchroniniam programavimui vadovas: MDN žiniatinklio dokumentai – gavimo API .
  4. Paaiškina async/wait naudojimą asinchroninėms funkcijoms tvarkyti „JavaScript“ su keliais kodų pavyzdžiais: JavaScript.info – Async/Await .