Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ajax] Moje pierwsze starcie, czyli przewodnik dla całkowicieZielonych
TomASS
post
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
kukix
post
Post #2





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Siedze już kurde drugi dzień nad tym ajaxem i albo jestem jakis ciemny, albo nie wiem... Już nie napisze, że nie potrafie przerobić przykładu "stronnicowanie danych" tak, zeby kożystał z tabeli o innej strukturze... no ale pokolei...

Pierwsze, przez co nie moge przebrnąc to wstawieniue danych z bazy do formularza...w tym przypadku kożystałem z '.value', nie kożystałem z '.innerHTML' ponieważ w formularzu nic sie nie działo.. '.innerHTML' bez problemu wstawia dane do np <DIV id="xxx">...</DIV> ale do <INPUT type="text" name="xxx" id="xxx"> już nie wstawia, wyskakuje błąd.. (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

plik zaladuj.js:
Kod
function wyswietl() {    
 advAJAX.setDefaultParameters({
   onInitialization : function(obj) { document.getElementById(obj.tag).value = "Przygotowanie..."; },
   onLoading : function(obj) { document.getElementById(obj.tag).value = "Ładowanie..."; },
   onSuccess : function(obj) { document.getElementById(obj.tag).value = "" + obj.responseText; },
   onError : function(obj) { document.getElementById(obj.tag).value = "Error..."; }
 });
 advAJAX.get({ url: "zaladuj.php?wartosc=naglowek", tag: "news_naglowek" });
 advAJAX.get({ url: "zaladuj.php?wartosc=data", tag: "news_tresc" });
 advAJAX.get({ url: "zaladuj.php?wartosc=autor", tag: "news_autor" });
 advAJAX.setDefaultParameters({});
}


plik zaladuj.php:
  1. <?php
  2.  
  3. $mysql_link = mysql_connect('host', 'login', 'haslo');
  4.     
  5. $mysql_result = mysql_query('SELECT '.$wartosc.' FROM tbl_news WHERE id_news=3 LIMIT 0,1');
  6.  
  7. $row = mysql_fetch_assoc($mysql_result);
  8. print($row[$wartosc]);
  9.  
  10. ?>


problem z tym kodem jest taki, że wrzucając zawartość pliku zaladuj.php do pola INPUT wrzuca razem ze statystykami home.pl (home dokleja je do każdje strony)... w przypadku 'innerHTML' nie ładowało tego....

Wiem, że nie jest to zbyt skomplikowany problem, jest to poprostu "wrzucanie" danych do formularza, podstawopwa sprawa, no ale jednak jest to problem..Może ktoś mi pomóc?

Ten post edytował kukix 13.03.2006, 21:01:56
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 Aktualny czas: 2.10.2025 - 17:38