webmaster webmastering webdesign

Jeste¶ tutaj: webmade.org >> porady >> javascript

P³ywaj±ca ramka jako technika komunikacyjna AJAX

autor: Marcin 'loganek' Kolny, ostatnia modyfikacja: 2008-05-10

szukaj: AJAX AJAX obiekt XMLHttp obiekt XMLHttp p³ywaj±ca ramka p³ywaj±ca ramka

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.

O technologii

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.

Piszemy obiekt AJAfiX

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.

Strona g³ówna

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.

Wady techniki

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

Osoby czytaj±ce tê publikacjê przegl±da³y równie¿:

Chcesz zostaæ programist±?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org