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 2.03.2006, 08:21:24
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 ponownie wszystkich forumowiczów guitar.gif

Postanowiłem opisać jeszcze jeden przykład na wykorzystanie AJAXa oraz na rozwiązanie popularnego problemu od czasu do czasu poruszanego na tym forum.

Chodzi tutaj o dwa selecty <span style="font-style: italic;">"sprzężone"</span> ze sobą w ten sposób, że wybór odpowiedniej pozycji na <span style="font-weight: bold;">selekcie1</span> wpływa na zawartość <span style="font-weight: bold;">selecta2</span> - np. mamy wybrać ze spisu jedną wieś w Polsce. Przeszukując selectem cały spis wszystkich miejscowości moglibyśmy się zaszukać na śmierć tongue.gif . Wygodniej byłoby wybierać po kolei: Województwo -> Powiat -> Gmina -> Miejscowość.

Przedstawie tuta tylko pierwszy etap (Województwo -> Powiat) - dorobienie reszty jest już dziecinnie proste.

Noto zaczynamy.
Na początek podam definicję bazy danych abyście nie musieli się trudzić - oczywiście ktoś może ją wypełnić swoimi danymi:
  1. #
  2. # Struktura tabeli dla `powiaty`
  3. #
  4.  
  5. CREATE TABLE `powiaty` (
  6. `ID` int(10) NOT NULL AUTO_INCREMENT,
  7. `ID_wojewodztwo` int(10) DEFAULT NULL,
  8. `Powiat` varchar(20) DEFAULT NULL,
  9. UNIQUE KEY `ID` (`ID`)
  10. ) TYPE=MyISAM AUTO_INCREMENT=15 ;
  11.  
  12. #
  13. # Zrzut danych tabeli `powiaty`
  14. #
  15.  
  16. INSERT
  17. INTO `powiaty` VALUES (1, 1, 'Wroclawski');
  18. INSERT
  19. INTO `powiaty` VALUES (2, 1, 'Sroda Slaska');
  20. INSERT
  21. INTO `powiaty` VALUES (3, 1, 'Miekinia');
  22. INSERT
  23. INTO `powiaty` VALUES (4, 1, 'Legnica');
  24. INSERT
  25. INTO `powiaty` VALUES (5, 1, 'Lubin');
  26. INSERT
  27. INTO `powiaty` VALUES (6, 2, 'Opole');
  28. INSERT
  29. INTO `powiaty` VALUES (7, 2, 'Brzezie');
  30. INSERT
  31. INTO `powiaty` VALUES (8, 2, 'Grodkow');
  32. INSERT
  33. INTO `powiaty` VALUES (9, 2, 'Brzeg');
  34. INSERT
  35. INTO `powiaty` VALUES (10, 2, 'Nysa');
  36. INSERT
  37. INTO `powiaty` VALUES (11, 3, 'Szczecin');
  38. INSERT
  39. INTO `powiaty` VALUES (12, 3, 'Szczecinek');
  40. INSERT
  41. INTO `powiaty` VALUES (13, 3, 'Gryfow');
  42. INSERT
  43. INTO `powiaty` VALUES (14, 3, 'Miedzyzdroje');

Jak zwykle mamy 4 pliki. Pierwszy z nich to dobrze wszystkim znay plik <span style="font-weight: bold;">advajax.js</span>. Kolejnym plikiem jest <span style="font-weight: bold;">dzialaj.html</span> (plik który uruchamia użytkownik), plik <span style="font-weight: bold;">odpowiedz.php </span>- generujący odpowiedź z serwera w postaci XML oraz plik z funkcjami JS - <span style="font-weight: bold;">function.js</span>.

Plik uruchamiany przez użytkownika nie jest wielce skomplikowany:
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  2. </head>
  3.  
  4. <select name="wojewodztwa" id="wojewodztwa" onchange="getRecords();">
  5. <option value="1">Dolnośląskie</option>
  6. <option value="2">Opolskie</option>
  7. <option value="3">Zachodnio Pomorskie</option>
  8.  
  9. <select name="gminy" id="gminy" style="width: 200px;">
  10.  
  11. <script type="text/javascript" src="advajax.js"></script>
  12. <script type="text/javascript" src="function.js"></script>
  13. </body>
  14. </html>

Składa się on z dwóch selectów (wojewodztwa - z wypełnioną listą) oraz gminy (będzie dopiero wypełniany)

Plik odpowiedz.php jest bardzo ładny smile.gif :
  1. <?
  2. header("Content-type: text/xml; charset=UTF-8"); 
  3. echo '<?xml version="1.0" encoding="UTF-8"?>';
  4.  
  5. $dbhost = localhost;
  6. $dblogin = root;
  7. $dbhaslo = '';
  8. $db = uop;
  9. mysql_connect (localhost,root,'') or die ("Nie masz uprawnien");
  10.  
  11.  
  12. $wojewodztwo = (int)$_GET['wojewodztwo'];
  13. if(!$wojewodztwo) $wojewodztwo = 1;
  14.  
  15. echo '<records>';
  16. $query = "SELECT ID, Powiat FROM powiaty WHERE ID_wojewodztwo='$wojewodztwo'";
  17. $result = mysql_query($query);
  18. while ($row = mysql_fetch_array($result)){
  19. echo '<record>';
  20. echo '<ID>'.$row['ID'].'</ID>';
  21. echo '<nazwa>'.$row['Powiat'].'</nazwa></record>';
  22. }
  23.  
  24. echo '</records>';
  25. ?>

Bardzo ważny jest nagłówek - aby był to plik XML:
  1. header("Content-type: text/xml; charset=UTF-8"); 
  2. echo '<?xml version="1.0" encoding="UTF-8"?>';

Potem zwykłe zapytanie do bazy danych wybierające odpowiednie rekordy - nic szczególnego.
Po zapytaniu następuje generacja XML - także nic co mogło by być bardzo szczególnym zajęciem. Nie zagłębiam się tutaj w puste znaczniki (aby zamiast <nazwa></nazwa> pisać </nazwa>) nie zajmuję się także polskimi znaczkami aby nie komplikować kodu - i muszę coś pozostawić jeszcze Wam smile.gif

Bardzo istotnym plikiem jest plik function.js:
  1. function $(id){
  2. return document.getElementById(id);
  3. }
  4.  
  5.  
  6. function parseRecords(xml) {
  7.  
  8. var opttypes = document.getElementById("gminy");
  9. record = xml.getElementsByTagName("record");
  10. ID = new Array();
  11. nazwa = new Array();
  12. for (i = 0; i < record.length; i++) {
  13. nazwa[i] = record[i].childNodes[1].childNodes[0].nodeValue;
  14. ID[i] = record[i].childNodes[0].childNodes[0].nodeValue;
  15.  
  16. }
  17.  
  18. for (i = opttypes.options.length-1; i >= 0; i--) {
  19. opttypes.remove(i);
  20. }
  21.  
  22. for(var i = 0; i < nazwa.length; i++) {
  23. opttypes.options[i] = new Option(nazwa[i],ID[i]);
  24. }
  25. }
  26.  
  27.  
  28. function getRecords() {
  29. var wojewodztwo = $("wojewodztwa").value;
  30.  
  31. advAJAX.get({
  32. url : "odpowiedz.php?wojewodztwo="+wojewodztwo,
  33. onInitialization : function(obj) {
  34. $("gminy").disabled="true";
  35. },
  36. onSuccess : function(obj) {
  37. parseRecords(obj.responseXML);
  38. $("gminy").disabled="";
  39. }
  40. });
  41. }

Trzy skromne funkcje, a właściwie tylko dwie: jedna parsująca wynik XML na kod HTML. Dzieje sie to za pomocą new Option(Nazwa,Value), a wartości są zczytywane z odpowiedzi XML za pomocą:
  1. record[i].childNodes[0].childNodes[0].nodeValue;
  2. record[i].childNodes[1].childNodes[0].nodeValue;

Jest jeszcze funkcja "uruchamiająca" AJAXa. Najpierw prosi go o to aby wyczytał odpowiedni URL z odpowiednia opcia (?wojewodztwo) a nastepnie podczas inicjalizacji blokuje selecta gminy. Po zakonczeniu wczytywania (onSuccess) XML jest parsowany a select gminy odblokowywany.

To tyle - it`s simply smile.gif
Nie powinno nastarczyć to kłopotu ludziom z podstawową znajomością JS, php, MySQL.

P.S Proszę nie zwracać na błedy w postaci że dany powiat nie jest powiatem albo nie leży w odpowiednim województwie tongue.gif

Ten post edytował TomASS 6.08.2006, 22:13:49


--------------------
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2024 - 22:58