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

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: 19.04.2024 - 17:37