Pozdrav svima.
Da malo ovo zakuvamo :) Dakle, reshiti ovakav problem je moguce obichnim java skriptom i naravno uz malu pomoc servera. No, odmah da napomenem, da ovo shto cu sada reci nije nimalo lepo sa aspekta lepote programiranja tako da ako vam ovakvo neshto zaista nije potrebno, nemojte to ni raditi :)
Problem se sastoji iz 2 podproblema:
(1) Potrebno je uputiti serveru zahtev, na koji ce on da odgovori, ali tako da njegov odgovor ne izazove reload stranice.
(2) Pod uslovom da smo reshili problem (1) ostaje da nekako podatke koje je server vratio populiramo na nashu stranicu.
--
(1) Ovo je jednostavno: potrebno je zatrazhiti odgovarajuci URL od servera, a na serveru pripremiti skriptu koja ce na takav zahtev odgovoriti sa HTTP response kodom 204 (proguglajte za znachenje :). Ovde je problem reshen - zahtev je upucen serveru, server je to primio i nasha je skripta odradila vec shta je trebala da odradi, i vratila je kod 204 koji je browseru rekao da ne treba da refreshuje stranicu.
(2) Ovde pochinju problemi. Zbog specifichnosti gorepomenutog response-a, rezultat ne mozhe imati telo, vec samo hedere - shto znachi da bi nachin da server poshalje neke podatke natrag stranici bio preko kolachica. E sad, problem se svodi na populiranje podatka na stranicu. Javascriptom bi to bilo neshto ovakvo (ne zamerite na greshkama, pishem ovako odokativnom metodom) :
Code:
function Populiraj() {
var stari_brojac = getCookie("brojach");
var lokal = 1;
konekcija.click();
while ((getCookie("brojach") == stari_brojac)&&(lokal < 500) {
lokal=lokal+1;
pause(10);
};
if (lokal < 500) destniacija.innerHTML = getCookie("brojach");
else destinacija.innerHTML = "Error.";
}
Funkcije getCookie i pause mozhete sami napisati ili naci negde na internetu: getCookie u stvari parsira document.cookie i vadi odgovarajucu vrenost (da podsetim: document.cookie je u formatu "var1=vrednost1; var2=vrednsot2" itd.) a pause pauzira izvrshavanje na 10 milisekundi.
Dakle shta se deshava? Prvo uzimamo trenutnu vrednost kolachica brojach koji server posle svakog zahteva inkrementuje i poshalje kao response. Potom linku koji smo u nashem htmlu nazvali konekcija (znachi prazan tj. nevidljiv link) naredjujemo da odradi svoj posao (npr.
http://www.server.com/inc.php). Nakon shto server vrati response, imacemo novu, inkrementovanu vrednost kolachica brojach. Naredna petlja je tu da bi ogranichila brzinu izvrshavanja funkcije, jer ne mozhe tako brzo da se odradi request/primi response od servera - mozhda se nikad ni ne desi, zbog chega imamo ogranichenje od oko 5 sec kako ne bi petlja zablokirala browser. I na kraju u neki DIV objekat koji smo nazvali destinacija upisujemo novu vrednost brojacha.
Mozhda se neko pita zashto sam ovvo napisao da radi preko konekcija.click() ... ako se dobro secam dok sam to radio, link koji bi imao href ka toj skripti i u onclick event ovu funkciju ne bi radio, jer IE nece da updatuje kolachice dok se izvrshavanje akcije klika na takav link ne okoncha). Naravno, mozhemo da baratamo i sa vishe vrednosti, ali imajte na umu da je ogranichenje od mislim 20 kolachica. Isto tako, velik broj vrednosti, komplikovana stranica - to ce da bude sve samo ne lepo programiranje tako da ako mozhete, izbegnite to. Da napomenem: ovo shto sam napisao sigurno radi u IE ali glavu dajem da u ostalim browserima ne radi ... tako da bi bilo lepo da to neko odradi. :)
Svako dobro.