Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z setTimeout
Forum PHP.pl > Forum > XML, AJAX > AJAX
hobibit
Kod ma za zadanie wczytywac na bierząco dane z bazy danych:
skrypt.js
window.onload = function() {
setTimeout("post();",1000);
}

function post() {
var xhr = createXMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState==4) {
if (xhr.status==200) {
var odpowiedz = xhr.responseText;
$("results").innerHTML = odpowiedz;

} else {
alert("BŁĄD:"+xhr.status);
}
}
}

xhr.open("POST", "skrypt.php", true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send("param=1");
}
function createXMLHttpRequest() {
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try { return new XMLHttpRequest(); } catch(e) {}
alert("Brak obsługi XMLHttpRequest");
return null;
}

//To teoretycznie działa

Potem krutkie php:
function start(){
mysql_connect('localhost','qwe','haslo');
mysql_select_db('qwe');

$dane = mysql_fetch_assoc(mysql_query("SELECT * FROM test WHERE id = '1'"));
return $dane['test'];
}

echo start();

I co się dzieje: po określonym czasie funkcja php jest odpalana i z bazy danych wczytuje odpowiadnią wartość, więc wszytko teoretycznie ok.
Jednak teoretycznie funkcja miała odpalać się co 1000 milisekund przez co miała wychwytywać ewentualne zmiany w bazie danych ale nic takiego nie następuje.
Trzeba odświarzyć stronę żeby zmiany w bazie danych zostały wykryte. Co zrobić zeby na bierząco skrypt zmieniał zawartość strony w zależności od zawartości bazy danych?
nevt
a co to jest questionmark.gif
Kod
$("results").innerHTML = odpowiedz;

bo u mnie wywołuje błąd składni JS...
hobibit
InnerHTML wkłada kod ktml do danego pojemnika.
Potrzebujesz mieć jakiś element blokowy (div) o id=results
nevt
no wszystko pięknie, ale przecież:
Kod
// nie
$("results").innerHTML = odpowiedz;
// tylko
document.getElementById('results').innerHTML = odpowiedz;

czy ja czegoś nie kumam??
hobibit
Dobrze mówisz. Ale nie w tym jest problem. Funkcja działa ale jeden raz, znaczy po tym jak zmienie coś w bazie danych to na stronie nie ma zmian a chce żeby wykrywał zmiany w bazie danych.

Co do tego: $("results").innerHTML = odpowiedz;
to mam funkcje napisaną
function $(id){
return document.getElementById(id);
}


OK. Problem rozwiązałem. Nie udało mi się z setTimeout ale
Kod
window.onload = function() {
    window.setInterval("post();",1000);
}

poskutkowało.
markac
Działa jeden raz, bo tak ma działać funkcja setTimeout(). Musisz użyć setInterval().
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.