
JavaScript
Zdravím.
Proč je u toho vždý funkční až ten posledni div?
Muže je mezi sebou popřehazovát, ale vžda jen ten poslední.
<!DOCTYPE html>
<html>
<body>
<div id="shm/teplota_obyvak"" class="data">Žádná data :(</div>
<div id="shm/teplota_koupelna" class="data">Žádná data :(</div>
<div id="shm/teplota_loznice" class="data">Žádná data :(</div>
<div id="shm/teplota_pokoj" class="data">Žádná data :(</div>
<script>
function nactiData() {
var data = document.getElementsByClassName("data");
for (var i = 0; i < data.length; i++) {
var soubor = data[i].getAttribute("id")
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById(soubor).innerHTML =
this.responseText;
}
};
xhttp.open("GET", soubor, true);
xhttp.send();
}
}
nactiData();
setInterval(function () {
nactiData();
}, 10000);
</script>
</body>
</html>
Můžete vysvětlit, jak funguje toto?( xhttp. {}; )
A chybí tam středník (pokud není nepovinný v dané implementaci, ale v Internet exploreru by to neprošlo)
Problém bude nejspíš v this, je někdy záludné a v určitých případech je nutné si uložit pomocnou proměnnou novethis=this a potom pracovat uvnitř funkce s novethis.
Obecně je to problematika closures, což jsou je věc týkající se toho, zda uvnitř funkce jsou dostupné proměnné z vnější (a jakým způsobem). Funkce ve své podstatě by měly operovat pouze proměnnými, které dostanou v argumentech. Ale tak to není a proto i funkce operují s proměnnými dostupnými z nadřazeného scope (zjednodušeně globální proměnné)
doporučení: není nutné dávat všem prvkům class=data, stačí je dát do nadřazeného bloku:
Kde jsi viděl takovou konstrukcí? To snad ani nemůže fungovat.
Aha, asi nějaká chyba parsování... Prostě mi to zamlčelo ve všech příspěvcích to, že toho je poněkud více na tom řádku... od tečka onr...change=fu(...