Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ajax] Moje pierwsze starcie, czyli przewodnik dla całkowicieZielonych
TomASS
post 7.02.2006, 23:29:28
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Z topicu powstal artykuł
http://wortal.php.pl/phppl/wortal/artykuly...tarcie_z_ajaxem
topic przeznaczony na dyskusję na jego temat
----
nospor


Moje pierwsze starcie z AJAXem czyli przewodnik dla całkowicie zielonych.
Na podstawie klasy advAJAX Łukasza Lacha.

Zaskoczony sukcesem AJAXa w sieci, oraz problemami wielu użytkowników, postanowiłem zobaczyć z „czym to się je”, a moje doświadczenie przkazać innym. Zabieram się za googlowanie.

Zaczynam od tego czym właściwie jest AJAX. Jest, już przeczytałem - ale nie będę się tutaj rozpisywał, że jest to ble, ble, ble….tylko tak na mój chłopski rozumek. Jest to zaprzężenie JavaScriptu do ingerencji w kod HTML strony. JavaScript wysyła żądanie do serwera i otrzymuje odpowiedź, na jej podstawie modyfikuje cały czas otwartą stronę HTML.

Z technicznego punktu widzenia opiera się na „magicznej” właściwośći przeglądarki, która na zadane żądanie dostaje od serwera odpowiedź (XMLHttpRequest) w postaci tekstu (responseText) lub w postaci XML (responseXML). JavaScript „obrabia” odpowiedź i ingeruje w kod HTML (np. innerHTML lub window.write() ).

Googluję dalej, aby dowiedzieć się jak się z tego kożysta. W moje ręce wpada jedna z lepszych klas (i chyba jedyna polska klasa) advAJAX (http://advajax.anakin.us/index-pl.htm) autorstwa Łukasza Lacha. Klasa ta pozwala w prosty sposób kontrolować stan, w jakim jest nasze zapytanie. W skrócie polega to na tym, że wywołujemy metodę get() lub post() obiektu advAJAX i otrzymujemu odpowiedź (obj):
Kod
advAJAX.get({
   url: "http://www.example.com/page.html",
   onSuccess : function(obj) { alert(obj.responseText); }
});

W przykładzie tym próbujemy wykonać zapytanie (metodą get() ) na adresie: http://www.example.com/page.html. Po zakończeniu (onSuccess) wyświetlamy cały tekst w okienku (alert).

Równie dobrze mogłaby być tutaj dowolna funkcja JS:
Kod
advAJAX.get({
   url: "http://www.example.com/page.html",
   onSuccess : function(obj) { dodajHTML(obj.responseText);}
});


Możemy też przekazać w urlu jakieś zmienne:
Kod
page = parseInt(document.getElementById("page").value);
advAJAX.get({
   url: "http://www.example.com/page.php?p="+page,
   onSuccess : function(obj) { dodajHTML(obj.responseText);}
});


Klasa ta pozwala nie tylko kontrolować sytuację, w której strona załadowała się pomyślnie (onSucces), ale również w kilkunastu innych przypadkach, min w momencie inicjalizacji, podczas ładowania, po zakończeniu, po zakończeniu błędem, po zakończeniu sukcesem (pełny spis na (link) ). Np. aby zrobić napis (proszę czekać – loading):
Kod
page = parseInt(document.getElementById("page").value);
advAJAX.get({
   url: "http://www.example.com/page.php?p="+page,
   onInitialization : function(obj) ( ShowLoading();},
   onSuccess : function(obj) { dodajHTML(obj.responseText);},
   onFinalization : function(obj) { HideLoading();}
});

Wszystkie statusy polegają na interpretowaniu właściwości http_request.readyState odpowiedzi.

Klasa ta obsługuje również ponawianie połączenia, pamięć tymczasową przeglądarki, obsługę formularzy i grupowanie wywołań.

Myślę, że ciekawym przykładem, będzie przykład samego autora tej klasy. Będzie to stronicowanie. Do działania przykładu potrzebne są cztery pliki:2.html który zawiera cały kod html strony. Kod ten będzie modyfikowany przez JavaScript zawarty w pliku 2.js . W pliku 2.js jest funkcja getRecords() która wysyła proźbę (zapytanie) do pliku 2.php, który generuje odpowiedni XML. Działa to tak:
- użytkownik wczytuje stronę 2.html
- kod JS zawarty w pliku 2.js wysyła żądanie do pliku 2.php
- plik 2.php generuje odpowiedni kod XML i wysyła go z powrotem do JS (plik 2.html jest ciągle otwarty w oknie przeglądarki)
- kod JS otrzymuje odpowiedź w postaci obj.responseXML i funkcją parseXML modyfikuje kod strony 2.html (dodaje odpowiednie tagi do <tbody id="dataTable">
</tbody>.
Oczywiście nie możemy zapomnieć o ostatnim, najważniejszym pliku – klasie advAJAX.js. Przykładowy kod generujący XML może wyglądać tak:
  1. <?
  2. header("Content-type: text/xml; charset=UTF-8");  
  3. $query="SELECT count(*)AS total FROM zamowienia_old;";
  4. $result = mysql_query($query); 
  5. $row = mysql_fetch_assoc($result);
  6. $total = $row['total'];
  7.   
  8. $query="SELECT * FROM zamowienia ORDER BY Z.ID LIMIT 0,10";
  9. $result = mysql_query($query); 
  10. echo '<?xml version="1.0" encoding="UTF-8"?><records total="'.$total.'" max_per_page="'.$per_page.'" page="'.$page.'" count="'.mysql_affected_rows().'">';
  11.    while ($row = mysql_fetch_assoc($result)){
  12.   echo '<record>';
  13.     while(list($Index,$Value)=each($row)){
  14.       echo '<'.$Index.'>'.convert($Value).'</'.$Index.'>';
  15.     }
  16.     echo '</record>';
  17.     }
  18.  echo '</records>';?>


Oczywiście nic nie stoi na przeszkodzie kożystać z innch klas, lub samemu napisać dla siebie klasę obsługi AJAXa a w ostateczności używać „gołego” XMLHttpRequest.

Ufff to by było na tyle. Może na sam koniec troszkę linków:
Strona projektu advAJAX
Ajax w „gołej” postaci
Ajax wiki
Klasa do obsługi AJAX
Małe conieco o AJAX


A oto co można zrobić przy pomocy AJAXa:
https://www.paguna.com/
http://demo.script.aculo.us/
http://www.google.com/webhp?complete=1&hl=en
http://www.clearnova.com/ajax/
http://24ways.org/advent/easy-ajax-with-prototype
http://www.digitalmediaminute.com/article/...s-and-resources

Mam nadzieję, że przybliżyłem problematykę związaną z technologią AJAX. Jednak jak każda technologia ma swoje wady i zalety, nie można jej używać do wszystkiego, jednak to pozostawiam już czytelnikom.....


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
TomASS
post 9.02.2006, 20:05:01
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Witam. Aby jeszcze bardziej przybliżyć technologię AJAX, przedstawie jeszcze jeden przykład. Jest to ulepszona walidacja formularza do rejestracji użytkownika. Potrzebny będzie nam jak zwykle plik klasy advAJAX.js, plik z funkcjami js (register.js), oraz pliki: register.php oraz register2.php…… troszkę dużo się nazbierało, ale już wyjaśniam.

Ogólna idea jest taka:
Wczytujemy formularz z pliku register.php, po wypełnieniu pól zaczyna się magia……ekhm, no nie zupełnie, zaczyna się AJAX, wywołuje odpowiednią funkcję JS, która przesyła odpowiednie dane (z formularza) do pliku register2.php, on daje odpowiedź i ajax na podstawie otrzymanej odpowiedzi wysyła bądź nie formularz. Ktoś może powiedzieć, że to można zrobić bez ajaxa – fakt, można, ale nie zamierzam nikogo do tego przekonywać, potraktujmy to jako ćwiczenie.


Zaczniemy od pliku register.php. Równie dobrze, mógłby być to register.html, to bez różnicy:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <title>rejestracja nowego użytkownika</title>
  4. <script type="text/javascript" src="register.js"></script>
  5. <script type="text/javascript" src="advajax.js"></script>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. </head>
  8.  
  9. <form action="register3.php" method="POST" id="registerForm" name="registerForm">
  10. <tr><td class="napis">Login:</td><td><input type="text" name="login" id="login"></td></tr>
  11. <tr><td class="napis">Hasło:</td><td><input type="password" name="Haslo"></td></tr>
  12. <tr><td class="napis">Powtórz hasło:</td><td><input type="password" name="Haslo2"></td></tr>
  13. <tr><td class="napis">E-mail:</td><td><input type="text" name="email" id="email"></td></tr>
  14. <tr><td colspan="2" style="text-align: center;"><button onclick="sprawdz_dane();">Zarejestruj mnie...</button></td></tr>
  15.  
  16. </form>
  17. </body>
  18. </html>


Plik ten ma za zadanie wyświetlenie formularza, mamy 4 pola: Login, Hasło, Powtórz hasło oraz e-mail. Aby nie gmatwać przykładu zajmiemy się tylko „dodatkową” walidacją, czyli czy użytkownik lub e-mail istnieją już w bazie danych. Do przycisku Zarejestruj mnie…. Przypisana jest akcja „sprawdź dane()” która znajduje się w pliku register.js, który wygląda następująco:

  1. function $(id) {
  2. return document.getElementById(id);
  3. }
  4.  
  5. function sprawdz_dane() {
  6. var login = $("login").value;
  7. var email = $("email").value;
  8. var zapytanie = "register2.php?login="+login+"&email="+email;
  9. advAJAX.get({
  10. url : zapytanie,
  11. onSuccess : function(obj) {
  12. if(obj.responseText == "login"){
  13. alert("Użytkownik o takim loginie jest już w bazie danych");
  14. $("login").style.border='1px solid red';
  15. $("email").style.border='1px solid #7F9DB9';
  16. }
  17. if(obj.responseText == "email"){
  18. alert("Ten e-mail isntieje już w bazie danych");
  19. $("login").style.border='1px solid #7F9DB9';
  20. $("email").style.border='1px solid red';
  21. }
  22. if(obj.responseText == "OK") $("registerForm").submit();
  23. }
  24. });
  25. }

Funkcja sprwawdz_dane pobiera wartości pól input text login oraz email I na ich podstawie generuje odpowiednie zapytanie do pliku register2.php. Zapytanie to jest wykonywane (url: zapytanie). Jako odpowiedź mamy trzy możliwości: albo jest to login – tzn „login” jest już w bazie danych, albo jest to „email” – znaczy się ze e-mail jest w bazie, oraz”OK” – wszystko w porządku (można wysyłać formularz - $("registerForm").submit(); ) i zostanie wysłany formularz do pliku register3.php. Plik, który generuje odpowiedź na zadane żądanie (register2.php) wygląda następująco:

  1. <?
  2. $dbhost = localhost;
  3. $dblogin = root;
  4. $dbhaslo = '';
  5. $db = uop;
  6.  
  7. mysql_connect ($dbhost,$dblogin,$dbhaslo) or die ("Nie masz uprawnien");
  8. mysql_select_db ("$db");
  9.  
  10. $login = mysql_escape_string($_GET['login']);
  11. $email = mysql_escape_string($_GET['email']);
  12.  
  13. $query = "SELECT count(*)AS Ile FROM uop_users WHERE Login='".$login."';";
  14. $result = mysql_query($query); 
  15. $row = mysql_fetch_array($result);
  16.  
  17. if($row['Ile']) echo 'login';
  18. else{
  19.    $query = "SELECT count(*)AS Ile FROM uop_users WHERE e_mail='$email';";
  20.    $result = mysql_query($query); 
  21.    $row = mysql_fetch_array($result);
  22.    if($row['Ile']) echo 'email';    
  23.    else echo 'OK';
  24. }
  25. ?>

Nic nadzwyczjanego – dwa zapytania i tyle.

Oczywiście, można jeszcze kombinować z metodą assign klasy advAJAX:
  1. advAJAX.assign($(registerForm))

ale to już pozostawiam do treningiu. Całe rozwiązanie można podpatrzeć tutaj http://advajax.anakin.us/phpsolutions/1.html

Powodzenia drodzy forumowicze.


------------------------edit----------------------------------
Poprawiłem uwagi Marusza, sorki, nie wszystko można zauważyć pisząć, pewnie dlatego, że sam mam złe nawyki tongue.gif
A co do mysql_num_rows() to nie za bardzo się mogę zgodzić, ponieważ tak czy siak będą potrzebne dwa zapytania.......a co się tyczy niekonsekwencji to?

Ten post edytował TomASS 10.02.2006, 09:30:46


--------------------
Go to the top of the page
+Quote Post

Posty w temacie
- TomASS   [ajax] Moje pierwsze starcie   7.02.2006, 23:29:28
- - Puciek   Boom Wg. mnie nadaje sie to na artykul   8.02.2006, 04:39:09
- - mike_mech   Temat jest ostatnio popularny a ~TomASS napisał ki...   8.02.2006, 08:59:00
- - aleksander   to zdecydowanie nadaje się na artykuł, tutaj kompl...   8.02.2006, 14:38:28
- - mariuszn3   Według mnie większość tych klas do ajaxa (a chodzi...   8.02.2006, 14:41:07
- - crash   Tak czy inaczej artykuł bardzo dobry i pomocny dla...   8.02.2006, 14:47:27
- - mariuszn3   Cytat(crash @ 2006-02-08 13:47:27)Tak czy ina...   8.02.2006, 15:04:20
- - NX_Turbospeed   Nic z tego nie zrozumialem. Pozaym co ten Ajax rob...   8.02.2006, 20:52:39
- - crash   Najprostrzy przykład użycia, na chłopski rozum: AJ...   8.02.2006, 21:31:01
- - NX_Turbospeed   Aha. Pożyteczne ;P --- Nabijanie postów.! Ko...   9.02.2006, 14:42:18
- - TomASS   Witam. Aby jeszcze bardziej przybliżyć technologię...   9.02.2006, 20:05:01
- - Radarek   Nie jestem ekspertem od js ale takie cus widze po ...   9.02.2006, 22:00:22
- - crash   Ta... Tutaj $ to po prostu nazwa funkcji.   9.02.2006, 22:06:19
- - Radarek   No to szyd niezly . Nie dziwie sie wiec, ze powsta...   9.02.2006, 23:45:39
- - Marusz   TomASS, jest juz pozno wiec bede sie streszal: Cyt...   10.02.2006, 02:48:17
- - Tajny   Marusz pragnę tylko przypomnieć że używanie COUNT...   13.02.2006, 16:53:57
- - snipe   z tego co wywnioskowalem, to ajax sluzy do dynamic...   15.02.2006, 13:59:09
- - TomASS   Cytatajax sluzy do dynamicznego zmieniania zawarto...   15.02.2006, 14:32:39
- - mariuszn3   Cytat(snipe @ 2006-02-15 12:59:09)z tego co w...   15.02.2006, 15:46:06
- - Termit_   Hmm.. a co mają zrobić osoby, które wyłączają JS, ...   15.02.2006, 19:09:15
- - FiDO   I tu wlasnie wychodzi, jak to moj kolega z grupy l...   15.02.2006, 19:21:02
- - TomASS   Ja to robię wpierw jedną stronę - dla której nie p...   15.02.2006, 19:37:20
- - Termit_   Jasne. Wszystko przecież zależy od charakteru witr...   15.02.2006, 20:41:14
- - TomASS   Witam ponownie wszystkich forumowiczów Postano...   2.03.2006, 08:21:24
- - bigZbig   @TomASS - pierwszy post, z wyjatkiem sparafrazowan...   2.03.2006, 09:42:16
- - mike_mech   Cytat(bigZbig @ 2006-03-02 09:42:16)(...) Czy...   2.03.2006, 09:58:22
- - bigZbig   Cytat(mike_mech @ 2006-03-02 10:58:22)Niestet...   2.03.2006, 10:23:38
- - kukix   Witam. Zainteresowałem sie przykładem autora advaj...   8.03.2006, 19:41:57
- - TomASS   Tabelka jest już gotowa - zobacz do źródła tego pl...   8.03.2006, 22:50:00
- - kukix   Dzieki TomASS, Twoja odpowiedź była pomocna. jedn...   9.03.2006, 19:51:32
- - Diwi   z tego co się orientuje w javascripcie to zamiast:...   9.03.2006, 20:56:41
- - TomASS   CytatMam w administracji dział newsy, w którym zna...   10.03.2006, 13:55:52
- - kukix   Dzieki chlopaki za pomoc.. teraz już dużo mi sie r...   11.03.2006, 18:56:29
- - TomASS   CytatPrzeglądałem przykłady zastosowania AJAX...   11.03.2006, 22:58:33
- - anAKiN   Bardzo ładnie, panowie   12.03.2006, 10:25:30
- - TomASS   Dzisiaj przeczesując czeluścia internetu natrafiłe...   12.03.2006, 14:11:15
- - kukix   Siedze już kurde drugi dzień nad tym ajaxem i albo...   13.03.2006, 20:53:10
- - Vomit   A jak zrobic cos w stylu loadingu ale z procentami...   13.03.2006, 21:33:13
- - TomASS   Dla bardziej zainteresowanych napisałem kolejny pr...   13.03.2006, 22:07:32
- - Vomit   A moze jakis przyklad w stylu tego o co pytalem w ...   14.03.2006, 19:18:54
- - kukix   Cytat(Vomit @ 2006-03-14 20:18:54)Mam shoutbo...   14.03.2006, 22:06:28
- - mike_mech   Cytat(eMartio @ 2006-03-17 10:53:26)Czy można...   17.03.2006, 14:49:22
- - kukix   Mam jeszcze taką sprawę... Czytałem troche na str...   17.03.2006, 16:11:07
- - bigZbig   Cytat(eMartio @ 2006-03-17 18:21:45)I jak ter...   17.03.2006, 17:50:54
- - TomASS   Może coś wyjaśnię. Rzeczywiście mike_mech - nie ...   17.03.2006, 18:51:06
- - chomiczek   Hmm.. ja właściwie dopiero zainteresowałem sie AJA...   18.03.2006, 03:43:05
- - kukix   Używam do wysyłania fomrularza AJAX'a .. wszys...   19.03.2006, 21:50:53
- - bigZbig   Nie latwiej zrobic osobne funckje dla obslugi kazd...   20.03.2006, 08:30:32
- - kukix   Mam takie pytanie co do advAJAX.assign()... Chodzi...   20.03.2006, 17:10:32
- - chomiczek   Hmm.. ja mam pytanko dot. tego czego lepiej użyć, ...   21.03.2006, 08:37:53
- - bigZbig   Mozesz wyslac jedno zapytanie do serwera i odbiera...   21.03.2006, 08:55:53
- - anAKiN   Cytatno i problem jkest w tym, że z tego formularz...   22.03.2006, 11:40:18
- - chomiczek   a kiedy mozna spodziewać się wersji 1.1??   22.03.2006, 15:37:23
- - anAKiN   Cytata kiedy mozna spodziewać się wersji 1.1?? Na ...   22.03.2006, 22:06:28
- - TomASS   CytatNa koniec przyszlego tygodnia, prawdopodobnie...   22.03.2006, 23:12:45
- - kukix   Cytat(anAKiN @ 2006-03-22 23:06:28)Na koniec ...   24.03.2006, 11:44:21
- - anAKiN   AdvancedAJAX 1.1 http://anakin.us/blog/advancedaja...   25.03.2006, 03:08:42
- - TomASS   Szkoda, że onProgress działa tylko na Mozili Bard...   25.03.2006, 09:42:19
- - michalr   jak jest z tym "url:" czy mozna pobiera...   27.03.2006, 09:44:02
- - Radarek   Mozesz pobierac tylko dane z serwera, z ktorego zo...   27.03.2006, 11:35:11
- - kukix   Cytat(anAKiN @ 2006-03-22 12:40:18)Cytatno i ...   28.03.2006, 19:12:11
- - anAKiN   Fakt. Poprawione: http://advajax.anakin.us/opera/t...   28.03.2006, 20:20:53
- - kukix   OK.. teraz tablice śmigają elegancko ... Szkoda, ...   29.03.2006, 20:32:40
- - TomASS   W Operze to działa połowicznie...   29.03.2006, 21:00:59
- - anAKiN   Cytat(TomASS @ 2006-03-29 22:00:59)W Operze t...   29.03.2006, 21:31:35
- - TomASS   Wybacz Łukaszu moje niedoinformowanie. Otóż testow...   29.03.2006, 22:03:52
- - kukix   A co z polskimi literami? Wysyłając formularz funk...   30.03.2006, 14:32:44
- - chomiczek   Gdzieś wyczytałem, w tej chwili nie pamiętam źródł...   31.03.2006, 09:02:54
- - Vogel   z moich zabaw z komunikacją Flash <-> JS ...   31.03.2006, 10:26:38
- - mariuszn3   Do przesyłania różnych dziwnych znaczków (w tym po...   31.03.2006, 10:32:47
- - pawel_k   nie wiem czy to jest błąd czy przemyślana sytuajcj...   1.04.2006, 16:13:51
- - chomiczek   a ja właśnie sprawdziłem kwestie kodowania i nie t...   1.04.2006, 20:56:57
- - Zepco   Cytat(Radarek @ 2006-03-27 12:35:11)Mozesz po...   2.04.2006, 18:55:34
- - chomiczek   Cytat(Zepco @ 2006-04-02 17:55:34)Da się to j...   2.04.2006, 19:10:53
- - kukix   Cytat(pawel_k @ 2006-04-01 17:13:51)co do pol...   7.04.2006, 19:22:08
- - TomASS   Hej. Może by tak kolejny przykładzik kogoś zainter...   12.04.2006, 22:09:18
- - bigZbig   @TomASS -> ciekawy przyklad - lubie zabawy z ko...   13.04.2006, 07:08:50
- - nospor   Z racji faktu, iż powstał artykuł na podstawie top...   13.04.2006, 14:32:56
- - marcz   Witam! Muszę przyznać, iż idea AJAXu bardzo m...   17.04.2006, 18:54:51
- - TomASS   Cześć ad 2 skor pyt 1 zostało wycięte Załóżmy,...   17.04.2006, 21:54:11
- - marcz   dzięki za odpowiedź   18.04.2006, 21:28:12
- - kukix   Witam. Tak ostatnio próbowałem udoskonalić mój skr...   29.05.2006, 10:29:20
- - TomASS   1. pytanie: ja to robię tak: [PHP] pobierz, plaint...   29.05.2006, 14:04:20
- - yaotzin   Powiem szczerze ten artykuł tak naprawdę zaciemnia...   14.02.2007, 01:52:47
|- - mariuszn3   Cytat(yaotzin @ 14.02.2007, 01:52:47 ...   14.02.2007, 02:10:10
- - yaotzin   Cytat(mariuszn3 @ 14.02.2007, 02:10:1...   14.02.2007, 12:11:17
- - TomASS   Dzięki za uwagi! CytatBo nie wiem czy to pow...   23.02.2007, 13:40:31
- - yaotzin   Cytat(TomASS @ 23.02.2007, 13:40:31 )...   28.02.2007, 18:55:05
- - E -dd   CytatNo tak AJAX to technologia AJAX to też nie te...   2.03.2007, 15:47:44
- - yaotzin   Cytat(E -dd @ 2.03.2007, 15:47:4...   3.03.2007, 13:58:15
- - slawek_master   jak dla mnie to artykul napisany malo zrozumiale, ...   12.12.2007, 19:58:43
- - Xafaso   Jakie zdziwienie wszystkich ogarnęło... Jakby AJAX...   22.12.2008, 07:48:09
- - erix   Zanim coś powiesz, zastanów się 3 razy... CytatBar...   22.12.2008, 11:08:03
- - Crozin   CytatAJAX nie jest napędzany przez JS? :|AJAX nie ...   22.12.2008, 12:26:14
|- - nexis   Cytat(Crozin @ 22.12.2008, 12:26:14 )...   23.12.2008, 23:31:33
- - erix   CytatAJAX to najzwyklejszy na świecie JS No jak ni...   22.12.2008, 13:16:03
- - Crozin   CytatOwszem, coś innego.Chodziło mi o to, że przyk...   22.12.2008, 13:47:17
- - erix   A to to się zgodzę. Swoją drogą - ad. tematu - t...   22.12.2008, 14:14:41
- - Xafaso   No dobrze mogę się zgodzić, ale jednak AJAX się tr...   23.12.2008, 04:43:09
- - Crozin   Czym się różni?   23.12.2008, 08:12:59


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 Wersja Lo-Fi Aktualny czas: 25.06.2024 - 09:37