Jeste¶ tutaj: webmade.org >> porady >> javascript
autor: Marcin 'loganek' Kolny, ostatnia modyfikacja: 2008-05-10
Chyba wszyscy ceni±cy siê webmasterzy s³yszeli o technologi AJAX, a spora grupa z nich korzysta z tej technologii. Nic w tym dziwnego – dziêki niej mo¿na stworzyæ aplikacje dzia³aj±ce w przegl±darce, a nie odbiegaj±ce funkcjonalno¶ci± i szybko¶ci± od programów, które mo¿emy zainstalowaæ na naszym komputerze.
Jednak ze s³owem AJAX kojarzy siê nam g³ównie jedno ograniczenie: nie ma mo¿liwo¶ci u¿ywania przycisku wstecz. Do stworzenia programu dzia³aj±cego w przegl±darce zwykle wykorzystywany jest obiekt XMLHttp. Oferuje nam wiele funkcji u³atwiaj±cych komunikacjê z serwerem. Jednak ogranicza u¿ytkownika, nie pozwalaj±c skorzystaæ mu z przycisku wstecz. Jednak i na to jest sposób – metoda ukrytej p³ywaj±cej ramki.
Technika ukrytej p³ywaj±cej ramki polega na ukryciu obiektu iframe, do którego s± wysy³ane adresy stron. Strona jest wykonywana w niewidocznej ramce, a nastêpnie tre¶æ obiektu iframe mo¿e byæ pobrana przez stronê nadrzêdn±. My¶lê, ¿e wiêcej rozja¶ni siê przy omawianiu przyk³adu.
Aby zobrazowaæ trochê technologiê ukrytej ramki iframe stworzymy przyk³adow± stronê oraz obiekt do obs³ugi tej technologii. Przed przeczytaniem dalszej czê¶ci artyku³u polecam jednak przejrzeæ publikacje na temat tworzenia obiektów w JavaScript. Teraz stworzymy obiekt o nazwie AJAfiX, który ma za zadanie utworzyæ ramkê. Zdefiniujemy te¿ kilka metod.
Oto kod:
function AJAfiX(){ this.ramka=null; var ramkaEl = document.createElement("iframe"); ramkaEl.width=0; ramkaEl.height=0; ramkaEl.frameBorder=0; ramkaEl.name = "ukrytar"; ramkaEl.id = "ukrytar"; document.body.appendChild(ramkaEl); this.ramka = frames["ukrytar"]; this.Wykonaj=function(gdzie){ this.ramka.location = gdzie; } this.laduj=function (xx) { document.getElementById("tresc").innerHTML=xx; } }
Najpierw stworzona zostaje zmienna o nazwie ramka, w której bêdziemy przechowywaæ utworzony obiekt iframe. Nastêpnie tworzymy zmienn± ramkaEl, która bêdzie rzeczywist± p³ywaj±c± ramk±. funkcja createElement() tworzy obiekt iframe w dokumencie. Przypisujemy warto¶ci± width, height i frameBorder 0, ¿eby ramka by³a niewidoczna. W³a¶ciwo¶ciom name i id natomiast przypisujemy warto¶æ "ukrytar". Dziêki temu bêdziemy siê mogli pó¼niej do nich odwo³aæ. na koñcu przypisujemy elementowi ramka stworzony przed chwil± obiekt. Kolejnym elementem naszego obiektu s± metody. Funkcja wykonaj ma jeden parametr: adres strony o któr± przegl±darka bêdzie „prosiæ” w ¿±daniu. Ostatni± metod± bêdzie funkcja laduj, maj±ca za zadanie wy¶wietlenie parametru xx.
Naszym zadaniem bêdzie napisanie strony, która bêdzie pobiera³a tylko tre¶æ z plików pomocniczych. Napisali¶my ju¿ wcze¶niej klasê, która umo¿liwi nam realizacjê naszego zadania. Dodatkowo u¿ytkownik bêdzie móg³ korzystaæ z przycisku wstecz. Oto kod pliku index.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <script type="text/javascript" src="ajafix.js"></script> <script type="text/javascript"> window.onload=function(){ ajax=new AJAfiX(); ajax.Wykonaj("pr.php?id=jeden.txt"); } </script> <style> a{ cursor:pointer; color:blue; } </style> <title>Tytu³</title> </head> <body> <a onclick="ajax.Wykonaj('pr.php?id=jeden.txt')">Strona nr 1</a> <a onclick="ajax.Wykonaj('pr.php?id=dwa.txt')">Strona nr 2</a> <div id=tresc></div> </body> </html>
Na pocz±tku do³±czamy plik ajafix.js w którym znajduje siê deklaracja klasy. Nastêpnie w funkcji onload tworzymy obiekt AJAfiX, oraz wykonujemy metodê Wykonaj z parametrem pr.php?id=jeden.txt. Przyjrzyjmy siê teraz plikowi pr.php, aby zrozumieæ jak on dzia³a:
<script> window.onload = function () { parent.ajax.laduj('<? php if(file_exists($_GET["id"])){ $plik = fopen($_GET["id"], 'r'); $str = fread($plik, filesize($_GET["id"])); fclose($plik); $zaw = str_replace(array("\r","\n"), '<br />', $str); echo $zaw; } else echo 'Plik nie istnieje!'; ?>'); } </script>
Jak widaæ, strona bardzo prosta. Sk³ada siê tylko z jednej funkcji JS: onload. Ma ona za zadanie wywo³aæ funkcjê laduj obiektu ajax rodzica ramki(który wcze¶niej zosta³ utworzony). Parametrem tej funkcji jest tre¶æ pliku, podanego w zmiennej $_GET["id"]. Je¶li taki plik istnieje, jako parametr jest przekazywana jego tre¶æ, w przeciwnym razie argument bêdzie komunikatem o b³êdzie.
Jak widaæ, AJAX wcale nie musi ograniczaæ funkcjonalno¶ci przegl±darki u¿ytkownika. Jednak i to zastosowanie ma wadê – je¶li za³adowanie strony do ukrytej ramki nie powiedzie siê, u¿ytkownik nie otrzyma ¿adnych informacji.
Marcin 'loganek' Kolny
szukaj: AJAX obiekt XMLHttp p³ywaj±ca ramka
Osoby czytaj±ce tê publikacjê przegl±da³y równie¿:
© 2004-2008 copyright by webmade.org