
Oto moja sytuacja: pragnę z pomocą obiektu XMLHttpRequest pobierać co, dajmy na to, 3 sekundy, dane z bazy danych mySQL. Całe zapytanie powinno odbywać się metodą post - dla bezpieczeństwa i zachowania ogólnej logiki.
Oto mój problem: Dane pobierają się tylko za pierwszym razem! Stworzyłem sobie nawet na potrzeby "debugowania" przycisk "odśwież" wywołujący funkcję aktualizowania. I co? Działa! Oznacza to, że robię błąd z wywoływaniem funkcji co te 3 sekundy. Najprawdopodobniej to jest źródłem owego problemu.
Najważniejsze fragmenty pochodzą z dwóch plików: oczko.js oraz oczkores.php . Wyglądają następująco:
oczkores.php:
... { $r = $_POST[ "r" ]; if ( !$sql_conn ) { } if ( $r == "rooms" ) { $query = "SELECT id FROM rooms WHERE game='oczko'"; $ark = 0; { $ar[ $ark ] = $id[ 0 ]; $ark++; } for( $i = 0; $i < $ark; $i++ ) { $query = "SELECT login FROM users WHERE room='" . $ar[ $i ] . "'"; $a = ""; { $a .= $player[ 0 ] . ", "; } $ar[ $i ] . "</span>" . $b . "</div>"; } } }
oczko.js (swoją drogą - jest tu kolorowanie składni js?)
.... function refreshList() { if ( xmlhttp.readyState == 4 || xmlhttp.readyState == 0 ) { params = "r=rooms"; xmlhttp.open( "POST", "oczkores.php", true ); xmlhttp.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" ); xmlhttp.setRequestHeader( "Content-length", params.length ); xmlhttp.setRequestHeader( "Connection", "close" ); xmlhttp.onreadystatechange = refreshHandle(); xmlhttp.send( params ); xmlhttp.overrideMimeType('text/html; charset=ISO-8859-2'); } } function refreshHandle() { if ( xmlhttp.readyState == 4 && xmlhttp.status == 200 ) { var a = '<div class="scrollListItem1"><span class="scrollListItemNumber">Pokój:</span>Gracze:</div>' + xmlhttp.responseText; document.getElementById( "scrollList" ).innerHTML = a; setTimeout( "refreshList();", 3000 ); } } ....
Nazwa odświeżanego diva to, jak można się domyślić, scrollList.
Pozdrawiam,
Pental!