Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z setTimeout
hobibit
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.03.2008

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


a co to jest (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Kod
$("results").innerHTML = odpowiedz;

bo u mnie wywołuje błąd składni JS...
Go to the top of the page
+Quote Post
hobibit
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.03.2008

Ostrzeżenie: (0%)
-----


InnerHTML wkłada kod ktml do danego pojemnika.
Potrzebujesz mieć jakiś element blokowy (div) o id=results
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


no wszystko pięknie, ale przecież:
Kod
// nie
$("results").innerHTML = odpowiedz;
// tylko
document.getElementById('results').innerHTML = odpowiedz;

czy ja czegoś nie kumam??
Go to the top of the page
+Quote Post
hobibit
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.03.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
markac
post
Post #6





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


Działa jeden raz, bo tak ma działać funkcja setTimeout(). Musisz użyć setInterval().
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:52