![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie wszystkich forumowiczów (IMG:http://forum.php.pl/style_emoticons/default/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ć (IMG:http://forum.php.pl/style_emoticons/default/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:
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: 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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) :
Bardzo ważny jest nagłówek - aby był to plik XML:
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Bardzo istotnym plikiem jest plik function.js:
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ą:
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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Skrypt jest dobry, ale ma pare mankamentow. Mianowicie przy przeladowaniu strony w celu weryfikacji formularza select wojewodztwo pozostaje na wybranym obiekcie, natomiast select gmina jest pusty. PRZYKLAD: Dolnoslaskie Lubuskie Malopolskie Wielkopolskie Wybieram Lubuskie. Laduja mi sie gminy: Nowa Sol Zielona Gora Zagan Zary Wybieram Zielona Gora. Klikam na wyslij. Przeladowuje mi sie strona. Ze wzgledu na blad musze uzupelnić niewypelnione pole. I teraz jest problem ze skryptem. Select wojewodztwa jest ustawione za pomoca selected na wybranym poprzednio lubuskim. Natomiast w select gminy nic nie ma i jest pusto. Klikam na wojewodztwa i na lubuskie i niestety nic to nie daje. Musze dopiero wybrac inne wojewodztwo, nastepnie kliknac ponownie na lubuskie i wtedy dopiero wyswietli sie lista gmin z lubuskiego. Strasznie to nieporeczne. Czy mozna to jakos poprawic. Chodzi mi o to, zeby zapamietywal po przeladowaniu liste gmin i za pomoca selected ustawial na wybranej wczesniej gmine. Mysle, ze to poprawi funkcjonalnosc skryptu. Z gory dziekuje za odpowiedz. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jest to rozwiazanie, ale polowiczne poniewaz po przeladowaniu wyswietla dane w gminach, ale nie ustawia select na pozycji, ktora zostala wybrana przed przeladowaniem. Gdyby to sie udalo rozwiazac skrypt bylby idealny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Prosze o podpowiedz.
Ten post edytował luckyluc 22.01.2007, 23:15:22 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 23:50 |