Jest w tej samej domenie i w tym samym katalogu, na czas testów przeniosłem do głównego katalogu.
Katalog nie ma znaczenia.
Czegoś nie rozumiem albo mam zaćmienie chwilowe...
Jak wykorzystać Twoją pomoc. Wstawiam ten kod podany do skryptu i co dalej? Co powinienem wpisać w miejsce "VAL" , "value=???"
Czy coś źle rozumuje?
Problem jest taki, że nie piszesz jednej aplikacji tylko dwie, tak na prawdę. Jedną, która serwuje Twój zasób (ten plik jednostki1.txt
), oraz drugą, aplikację klienta która widzisz w przeglądarce.
To nie jest taki sam problem jak np otworzenie sobie pliku w pythonie lub PHP, i użycie go. To co Ty próbujesz zrobić, to użyć w aplikacji klienta treści z aplikacji servera.
Możesz to zrobić na kilka sposobów:
- Wrenderować treść tego pliku w kod źródłowy aplikacji
- Wrenderować go w treść HTML'a, i potem odczytanie go
- Wysłanie treści przez websockety
- Wysłanie treści przez osobne żądanie HTTP
- Wysłanie treści przez nagłówki początkowego żądania
- Wysłanie go przez ciastka/cookie
- Server-side rendering aplikacji
Myślę że najbardziej popularnym, ale oczywiście nie jedynym sposobem jest właśnie żądanie HTTP, ale ciężko powiedzieć czy to jest dla Ciebie dobre rozwiązanie, bo nie wiadomo co tak na prawdę chcesz osiągnąć, jak ważną rzeczą jest dla Ciebie performance. Jeśli jednak zdecydujesz się na żądanie HTTP właśnie, to musisz wiedzieć że w JS dla webówki żądania HTTP są asynchroniczne, to znaczy nie muszą się wykonaćl linijka po linijce, i należy to obsłużyć w jakiś sposób, najbardziej popularnym są Promise
(to jest co ma metody .then()
oraz .catch()
).
fetch("http://arcadegame.pl/jednostki1.txt")
.then(response => response.text())
.then(content => {
const MAX = 300;
const VAL = parseInt(content);
const cp = new CircleProgress('.progress', {
max: MAX,
value: VAL,
animationDuration: 400,
textFormat: (val) => val + '/300',
});
document.querySelector('#value-input').addEventListener('change', e => {
const val = e.target.value;
cp.value = val;
cp.el.style.setProperty('--progress-value', val / MAX);
});
});
Ma to oczywiście taką konsekwencję, że Twój kod nie uruchomi się dopóki żądanie się nie skończy i nie powiedzie. Jeśli np nie będziesz miał internetu, to żądanie sie nie powiedzie, nie odczytasz wartości z pliku jednostki1.txt
, oraz dalsza część aplikacji sie nie uruchomi.