• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem ze zmienną

VPS Starter Arubacloud
0 głosów
133 wizyt
pytanie zadane 22 grudnia 2019 w JavaScript przez saseta00 Użytkownik (700 p.)

Hejka, robie sobie hobbistycznie stronkę do przeliczania kryptowalut i napotkałem problem. 
Dane z api mam wyciągnietę poprzez await fetch w funkcji async, teraz robię kalkulator, tylko chciałbym korzystać w tym kalkulatorze ze zmiennych wyciągnietych z api, a nie ręcznie wpisywanych, tylko nie mam pojęcia jak to zrobić na tyle zgrabnie żeby nie tworzyć dziesiątek funkcji i burdelu w kodzie, ale tak żebym mógł się w kalkulatorze odwołać do kilkunastu wartości z funkcji w której je wyciągam. Nie wiem nawet jak przypisać zmienną np. data.LSK.PLN w której siedzi wartość danej waluty, do mojego kalkulatora w którym ręcznie przypisuje wartości, proszę o pomoc bo jak widać jestem trochę zielony w js'ie ale kombinuje ile mogę. 

Nie wiem czy ten kalkulator wrzucać do środka tej funkcji async z fetchem, szukam prawidłowego rozwiązania i będę wdzięczny za wszelkie wskazówki dla laika, dziękuje i pozdrawiam gorąco.

api js

const hrf = "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,LSK&tsyms=,USD,PLN";
async function ceny() {

  const response = await fetch(hrf);
  const dane = await response.json();
 console.log(data.BTC.PLN);    //wyswietlanie wyniku konsola
document.getElementById('BTCpln').textContent = data.BTC.PLN;  // wyswietlanie wyniku w html
   //no i takich wartości mam powyciąganych ponad 20
}
ceny();

kalkulator:

async function przeliczaj() {

  var krok1;
  var krok2;
      var pln = 1;  // tu bym chciał przypisać zmienne jak data.BTC.PLN
      var eur = 4;          
      var usd = 3;
      
      switch (przelicznik.co.value)
      {
          case "PLN":
              krok1 = przelicznik.ile.value*pln;
              break;
          case "EUR":
              krok1 = przelicznik.ile.value*eur;
              break;
          case "USD":
              krok1 = przelicznik.ile.value*usd;
              break;
          default:
              krok1 = "nie udało się:(";
      }
      
      switch (przelicznik.naCo.value)
      {
          case "PLN":
              krok2 = krok1/pln;
              break;
          case "EUR":
              krok2 = krok1/eur;
              break;
          case "USD":
              krok2 = krok1/usd;
              break;
          default:
              krok2 = "nie udało się:(";
      }
      
  przelicznik.wynik.value = krok2;
}
			  <form action="" name="przelicznik">
				Co chcesz przeliczyć:
				<input type="text" name="ile" size="20" />
				 <select name="co">
				  <option name="PLN" value="PLN">PLN</option>
				  <option name="EUR" value="EUR">EUR</option>
				  <option name="USD" value="USD">USD</option>
				 </select><br /><br />
				
				Na co chcesz przeliczyć:
				<input type="text" name="wynik" size="20" disabled="disabled" />
				 <select name="naCo">
				  <option name="PLN" value="PLN">PLN</option>
				  <option name="EUR" value="EUR">EUR</option>
				  <option name="USD" value="USD">USD</option>
				 </select><br /><br />
				
			  <input type="button" value="Przelicz jednostki" onClick="przeliczaj()" />

</form>

 

1 odpowiedź

+1 głos
odpowiedź 23 grudnia 2019 przez antypop Mądrala (5,730 p.)
wybrane 28 grudnia 2019 przez saseta00
 
Najlepsza

Wyślij pobrane dane do zmiennej tablicowej :

let datas = [];
        const hrf = "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,LSK&tsyms=,USD,PLN";
        const ceny = () => {
        return new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            xhr.open("GET", hrf);
            xhr.addEventListener('load', () => resolve(xhr.responseText));
            xhr.addEventListener('error', () => reject(new Error(xhr.statusText)));
            xhr.send();
        });
    };
    ceny().then( result => datas = JSON.parse(result));

Wyjdzie Ci coś takiego:

datas 
{BTC: {…}, ETH: {…}, LSK: {…}}
BTC: {USD: 7522.43, PLN: 28948.52}
ETH: {USD: 132.58, PLN: 510.07}
LSK: {USD: 0.5462, PLN: 2.09}

I teraz podstawiasz sobie pod obliczenia na przykład 

datas['BTC'].USD

Pozdrawiam 

komentarz 28 grudnia 2019 przez saseta00 Użytkownik (700 p.)

Bardzo doceniam za poświęcony czas, fajnie wygląda to co Pan mi wysłał bo to naprawi mój problem, tylko nie wiem czemu zwraca mi pustą tablice i nie odwołuje się własnie do

datas['BTC'].USD //wyświetla komunikat ze .USD nie jest zadeklarowane

Zamieniłem swoją funkcję z await fetchem, na Pański kod, ale no właśnie coś nie gra, próbuję wywołać dane consolą ale nie radze sobię i najgorsze ze nie wiem gdzie leży problem. Przepraszam za amatorke :) 
Dla pewności dorzucam jeszcze raz kod

let datas = [];
const hrf = "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,LSK&tsyms=,USD,PLN";
const ceny = () => {
return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", hrf);
    xhr.addEventListener('load', () => resolve(xhr.responseText));
    xhr.addEventListener('error', () => reject(new Error(xhr.statusText)));
    xhr.send();
});
};


console.log(datas); 
ceny().then( result => datas = JSON.parse(result));

Dziękuje niezmiernie za pomoc

komentarz 29 grudnia 2019 przez antypop Mądrala (5,730 p.)
Odpaliłem ten kod i mam normalnie dostęp do całej tablicy datas. Wyrzuca Ci jakiś błąd w konsoli? Odśwież stronę i sprawdź w zakładce network co pobrał skrypt.
komentarz 29 grudnia 2019 przez saseta00 Użytkownik (700 p.)

Robię osobno na czystym htmlu i ciągle bez skutku. Zakładka Network widzi te dane, więc chyba jest problem w moim odwołaniu się do nich, w Consoli pusto, chyba że wywołuję:  console.log(datas); ale wyświetla mi tylko pusty obiekt: [] a jeżeli odwołuje się stricte do wartości czyli: 

console.log(datas['BTC'].USD);

to wywala mi błąd: Cannot read property 'USD' of undefined
Więc już trochę głupieje a przypuszczam że problem jest błahy, chciałbym sobie to już pod zmienne powrzucać ale bardzo pod górkę :D 
Dziękuje za cierpliwość, pozdrawiam
Dorzucam screena dla pewności. (bez błędu)  

komentarz 29 grudnia 2019 przez antypop Mądrala (5,730 p.)
Cały dokument tu wklej jak to masz tam teraz zrobione :)

Podobne pytania

+2 głosów
2 odpowiedzi 567 wizyt
pytanie zadane 3 lipca 2021 w JavaScript przez magic84 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 250 wizyt
pytanie zadane 17 listopada 2020 w C i C++ przez Marak123 Stary wyjadacz (11,190 p.)
0 głosów
2 odpowiedzi 364 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...