Chciałem zmieniać pewne elementy strony bez jej przeładowania. Zasadniczo ładowanie pliku PHP do div jest proste, jednak ja chciałem zmieniać na przykład background-color jakiegoś elementu albo na przykład value jakiegoś buttona.
Konkrety:
Mam 16 divów, które wyświetlam o tak:
<?php for ($i = 1; $i <= 16; $i++) { ?> </div> <?php } ?>
I teraz aby moje divy miały odpowiedni kolor tła, który ma się zmieniać w zależności od efektu działania skryptu php z interwałem co sekundę (to znaczy z opóźnieniem sekundowym) powyżej robię tak:
najpierw:
potem:
<script type="text/javascript"> var my_v; var stepp; function bla() { for (step = 1; step <= 16; step++) { stepp = step; //dane z php do zmiennej $.get('wykonaj.php?action=read&pin='+stepp, function( my_var ) { my_v = my_var; if (my_v == '0') { document.getElementById("pozition_ster_manual_c_"+stepp).style.backgroundColor = "green"; } if (my_v == '1') { document.getElementById("pozition_ster_manual_c_"+stepp).style.backgroundColor = "red"; } }); //dane z php do zmiennej }//-for setTimeout("bla()", 1000); //<--- czas odswiezania } $(document).ready(function(){ // wyzwolenie autoodswierzania bla(); }); </script>
W obecnej postaci skrypt szaleje, albo po prostu nie działa.
Jak to ma działać:
Skrypt wykonaj.php sprawdza stan pinów gpio, w efekcie zwraca "0" bądź "1".
czyli jeśli chcę znać stan pinu 1 wykonuję "wykonaj.php?action=read&pin=1" i dostaję 0 albo 1 i od tego uzależniam kolor tła wyświetlonego później diva.
skrypt działa jeśli testowo usuwam pętle "for (step = 1; step <= 16; step++) {" i na sztywno definiuję zmienną $stepp na przykład na "6"
wtedy div o id xyz_6 zmienia kolor tła.
Czy ktoś ma pomysł gdzie popełniam błąd ?