Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem JavaScript

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>

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny