Ak zmeníš v pôvodnom programe riadok "var" na "let" v riadku "var soubor = data[i].getAttribute('id')", tak to začne fungovať.
Dôvod bol už napísaný - je to kvôli tomu, že premenné deklarované pomocou var sú naviazané na funkciu. To znamená, že premenná soubor použitá v obsluhe udalosti onreadystatechange je stále jedna a tá istá premenná pre všetky iterácie cyklu. Takže každá iterácia nastaví hodnotu premennej soubor na identifikátor požadovaného elementu a po skončení cyklu táto premenná obsahuje posledný identifikátor a obsluha udalosti sa vykonáva až po ukončení cyklu.
Osobne by som to napísal takto (XMLHttpRequest by som použil iba ak by som musel podporovať nejaký zastaralý prehliadač, ako napr. IE11 - resp. skôr by som použil polyfill a transpiler):
<!DOCTYPE html>
<html>
<body>
<div data-url="shm/teplota_obyvak">Žádná data :(</div>
<div data-url="shm/teplota_koupelna">Žádná data :(</div>
<div data-url="shm/teplota_loznice">Žádná data :(</div>
<div data-url="shm/teplota_pokoj">Žádná data :(</div>
<script>
const dataElements = [...document.querySelectorAll('div[data-url]')];
function loadData() {
dataElements.forEach(async dataElement => {
const response = await fetch(dataElement.dataset.url);
if (response.ok) {
dataElement.textContent = await response.text();
}
});
}
loadData();
setInterval(loadData, 10000);
</script>
</body>
</html>