Kiedy chcemy odświeżyć pewien element na stronie bez konieczności jej przeładowania, z pomocą przychodzi AJAX. Dzięki niemu użytkownik nie musi przerywać pracy na stronie – połączenie z serwerem następuje w tle, zaś dane są aktualizowane niezwłocznie po jego zakończeniu.
Bardzo dobrym przykładem zastosowania tej technologii jest Gmail – nie musisz przerywać pisania maila, żeby przeładować stronę i sprawdzić czy w tym czasie coś przyszło – strona sama łączy się z serwerem w tle co jakiś odstęp czasu, dzięki czemu o nowej poczcie zostaniesz poinformowany niezwłocznie bez konieczności przerywania pracy.
Załóżmy, że mamy DIVa i chcemy odświeżać jego wnętrze co sekundę. Poniżej przedstawiam kod JavaScript konieczny do wykonania tego zadania. JavaScript potrafi łączyć się z serwerem w tle dzięki obiektowi XMLHttpRequest.
Poniższy kod wrzucamy do sekcji HEAD naszej strony.
<script language=javascript> // tworzymy zmienna var object = false; // tworzymy obiekt XMLHttpRequest (dla IE jest troche inaczej, stad funkcja warunkowa) if (window.XMLHttpRequest) object = new XMLHttpRequest(); else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP"); // ponizsza funkcja pobiera dane ze wskazanego zrodla (pliku lub skryptu php) do wskazanego // DIVa poprzez obiekt XMLHttpRequest function getData(dataSource, divID) { // kontynuuje wylacznie gdy obiekt nie jest zajety if (object.readyState==4 || object.readyState==0) { // tworzy zmienna odpowiadajaca konkretnemu obiektowi na stronie var obj = document.getElementById(divID); // czyta z pliku lub wykonuje skrypt object.open("GET", dataSource); // definiuje metode obslugi odpowiedzi serwera object.onreadystatechange = function() { // kontynuuje jesli transmisja zostala zakonczona powodzeniem if (object.readyState == 4 && object.status == 200) obj.innerHTML= object.responseText; } // wysyla zadanie do serwera object.send(null); } } // w ponizszej funkcji wywolujemy funkcje getData z odpowiednimi parametrami // oraz wywolujemy ja sama rekurencyjnie po co okreslony czas (w naszym wypadku 1000 ms) function odswiezaj() { getData('ajax.php','mojDIVIK'); setTimeout("odswiezaj()", 1000); } </script>
Teraz pozostaje nam utworzenie DIVa o nazwie mojDIVIK gdziekolwiek w “ciele” strony oraz wywołać funkcję odswiezaj().
<html> <head> <!-- tutaj powinien sie znalezc powyzszy kod javascript --> </head> <body> <div id="mojDIVIK"> </div> <script language=javascript> odswiezaj(); </script> </body> </html>
Na koniec pozostawiłem utworzenie skryptu ajax.php, który będzie zwracał żądane przez nas dane. Może on łączyć się z bazą danych czy też czytać z pliku. W naszym przypadku będzie zwracał losową liczbę od 1 do 10.
<? srand(time()); $numer = rand(1, 10); echo $numer; ?>
I to już wszystko
Nasz div będzie aktualizowany w tle co sekundę losową liczbą z przedziału (1,10).

bardzo się przydało
wielkie dzięki!!!
super
szukalem tego dosc dlugo i wreszcie cos co dziala
super wielkie dzięki dziala próbuje modyfikować to do shoutboxa z odświeżaniem
Pod FF wszystko działa idealnie, ale IE nie odświeża ;/ Jaki może być tego powód?
Pod IE7 nie działa !!!
Pod IE nie działa wiele rzeczy, niestety M$ nie raczy trzymać się standardów. Nie znam odpowiedzi i nie mam możliwości sprawdzić, bo na chwilę obecną nie mam dostępu do IE7. Ale ten skrypcik wykorzystywałem wielokrotnie i zawsze wszystko było OK. Jak dorwe jakiegoś compa z Windowsami to sprawdze i dam odpowiedź.
FF & chrome – działa, pod IE7 niestety nie.
A poniższa zmiana też sprawy nie rozwiązuje;
var object = createXmlHttpRequestObject();
function createXmlHttpRequestObject()
{
var object;
try
{
object = new XMLHttpRequest();
}
catch(e)
{
var XmlHttpVersions = new Array(“MSXML2.XMLHTTP.7.0″,
“MSXML2.XMLHTTP.6.0″,
“MSXML2.XMLHTTP.5.0″,
“MSXML2.XMLHTTP.4.0″,
“MSXML2.XMLHTTP.3.0″,
“MSXML2.XMLHTTP”,
“Microsoft.XMLHTTP”);
for (var i=0; i<XmlHttpVersions.length && !object; i++)
{
try
{
object = new ActiveXObject(XmlHttpVersions[i]);
}
catch (e) {}
}
}
if (!object)
displayError(“Błąd podczas tworzenia obiektu XMLHttpRequest.”);
else
return object;
}
Rozwiązanie dla IE; na szybko zamiast GET zrobić POST, albo poczytać o cache IE (fajnie opisane na http://pl.wikipedia.org/wiki/XMLHTTP)
Zdrowia!
mógłby mi ktoś z tym pomóc ????
nie ma sprawy
ale w czym jest problem? w zakladce “o mnie” dalem dane kontaktowe, mozna pisac
Przydalo sie
, THX
pod IE
zamiast
trzeba wstawić
<!– –>
u mnie działa pod IE
A można zrobić aby przez ten skrypt działały polskie znaki? Bo jak wchodzę na stronę odczytu shouboxa to jest ok, a jak przez ten kod odświeżam to nie działają polskie znaki. Proszę o pomoc
co do mojej poprzedniej wiadomości to widać skrypt usuwający niechciane rzeczy działa wyśmienicie
skontaktowałem się z autorem i może za jakiś czas napisze to co mu podałem odnośnie IE albo przerobi skrypt… co do polskich znaków użyj kodowania UTF-8
niestety to wciąż nie działa :/
jak możesz odpisz mi w temacie: http://forum.4programmers.net/viewtopic.php?id=151032 bo nie chcę tu komentarzy spamować
A jesli chce odswiezyc dany element strony TYLKO RAZ np. z opoznieniem 3 sekund po wejsciu na strone.
Jak cos takiego zrobic ?
modyfikujesz funkcje odswiezaj mniej wiecej tak:
function odswiezaj()
{
setTimeout(“getData(‘ajax.php’,'mojDIVIK’)”, 3000);
}
mi coś nie dziala w ogóle nic nie ma na stronie, w ogóle nie mówiąc o odświerzaniu link do pliku http://streetfights.unl.pl/templates/refresh.php
No thx za to przydało się bardzo
Witam. Odświeżania działa. Powiedzmy, że do diva wczytuję stronkę ajax.php – w tym pliku mam skrypt js (animacja tekstu) i on nie działa. Co zrobić aby we wczytywanej stronie działały skrypty js? Proszę o pomoc.
Nie da się. Przenieś ten skrypt do tego samego dokumentu gdzie wywołujesz funkcję getData i wywołaj go po tej funkcji, np:
getData(‘ajax.php’,'div’);
animateText(‘div’);
lub cos w tym stylu.