Blog (16)
Komentarze (143)
Recenzje (0)

AJAX i jQuery (cz. 1)

@slepciuAJAX i jQuery (cz. 1)16.04.2012 03:32

W tym wpisie przedstawię jak załadować dane na stronę internetową bez jej przeładowywania. Wykorzystam w tym celu popularną bibliotekę JS o nazwie jQuery. Upraszcza ona operacje pobierania i wyświetlania danych na stronie i zapewnia działanie we wszystkich popularnych przeglądarkach.

Dzięki zastosowaniu AJAX'a możemy osiągnąć mnóstwo ciekawych rzeczy, ale przede wszystkim możemy przyspieszyć wyświetlanie informacji na stronie.

Zaczynamy

Na początek w sekcji head strony musimy załadować plik z biblioteką jQuery:

<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

Od teraz możemy używać jQuery na stronie. Stwórzmy przykładową stronę:

[code=html]

Zawartość strony

[/code]

Po dodaniu kilku stylów CSS otrzymamy coś takiego:

prosta strona
prosta strona

Zakładam, że pliki podane w odnośnikach istnieją i zawierają zawartość dla odpowiednich stron. Tworząc strony, których działanie oparte jest na JS musimy wziąć pod uwagę, że nie wszyscy użytkownicy mają włączoną jego obsługę. W związku z tym powinniśmy zapewnić działanie strony również bez włączonego JS. Są na to rożne sposoby i w rożnych sytuacjach różne się sprawdzą. Na potrzeby tego ćwiczenia proponuje przyjąć następującą zasadę. Pliki podane w linkach w menu posiadają pełną strukturę strony. Dzięki temu po ich kliknięciu z wyłączonym JS wgra się normalnie strona. Oprócz tego w katalogu "ajax" znajdują się pliki o tych samych nazwach, które zawierają tylko treść, która ma się znaleźć w prawej kolumnie. Jest to oczywiście bardzo proste rozwiązanie i nie określił bym go jako najbardziej optymalne, ale nie wymaga znajomości, żadnego dodatkowego języka programowania.

Szybko i prosto

Cały kod jaki musimy teraz dodać w sekcji head to:

<script type="text/javascript">

</script>

Kod $("#menu a").click(fn) przejmuje kliknięcie we wszystkie linki w elemencie o id równym "menu" i wykonuje funkcję podaną w nawiasach. Używamy tutaj funkcji anonimowej, w której wykorzystujemy metodę .load() dostępna w jQuery. Metodę "podpinamy" pod element, do którego ma być załadowana nowa treść. Jako argument podajemy adres url pliku do załadowania - pobieramy wartość atrybutu href linku i dodajemy do niego katalog "ajax". Na koniec wykonujemy e.preventDefault(); co zapobiega przejściu przeglądarki do adresu podanego w linku.

I to by było na tyle. Od teraz strony są ładowane bez przeładowywania strony.

Trochę więcej możliwości

jQuery nie ogranicza nas do tej jednej metody. Posiada szereg innych metod, które można wykorzystywać w zależności od potrzeb. Jest metoda $.getJSON, która ładuje obiekty JSON (JavaScript Object Notation ), jest $.get(), która pobiera plik jako tekst, ale rozpoznaje pliki XML i zwraca drzewo DOM XML, jest metoda $.getScript(), która ładuje skrypty JS itd. Nie czas i miejsce, żeby je wszystkie opisywać. Przejdę teraz do opisu metody $.ajax().

Pełen zakres możliwości

Wszystkie metody wykorzystywane w jQuery do obsługi AJAX są ostatecznie odwzorowywane przez jQuery na metodzie $.ajax(). Ta metoda daje nam największy zakres możliwości i też największą kontrolę nad ładowaniem danach do i z serwera. Dzięki zastosowaniu tej metody możemy np wyświetlać wstępną informację o ładowaniu się treści, komunikat błędu itp. Zmieńmy lekko strukturę naszej podstawowej strony. Dodamy do niej komunikat o ładowaniu strony oraz miejsce na tytuł strony:

[code=html]

Ładuję...

[/code]

Element loader dzięki CSS ukrywamy, będziemy go pokazywać za pomocą JS podczas ładowania danych.

Tym razem oprócz ładowania treści strony będziemy też poobierać jej tytuł. Aby to zrobić zmienimy strukturę naszych plików, które ładujemy. Nie będą to już zwykłe pliki HTML, ale pliki przechowujące dane w postaci JSON. Dla przykładu plik "ajax/oferta.html" wygląda następująco:

{"tytul":"Oferta","tresc":"Jestesmy wspaniałą firmą z wspaniałą ofertą."}

Kod JS, który załaduje treści:

[code=javascript]$(function(){ $("#menu a").click(function(e){ var content=$("#content"); var title=$("#title"); var loader=$("#loader"); $.ajax({ url: "ajax/"+$(this).attr('href'), dataType: "JSON", beforeSend: function(){ content.empty(); title.empty(); loader.show(); }, success: function(obj){ content.html(obj.tresc); title.html(obj.tytul); }, error : function(){ content.html("Przepraszamy, ale strona jest chwilowo niedostępna

"); }, complete: function(){ loader.hide(); } }); e.preventDefault(); }) })[/code]

Co tu się dzieje? Jak poprzednio przechwytujemy kliknięcie. Potem zapisujemy do zmiennych obiekty jQuery, które reprezentują treść strony, tytuł strony i element informujący o ładowaniu się treści. Dallej wykonanie metody $.ajax() i jak poprzednio wykonujem e.preventDefault();.

Metoda ajax() ma wiele parametrów, które podajemy jako zbiór par klucz:wartosc w nawiasach klamrowych. Użyte w przykładzie wartości to tylko mała część dostępnych, ale do tego zadania wystarczą. Po kolei:

url

Adres pliku, który ma zostać wywołany. W naszym przykładzie, są to pliki html, ale mogły by być pliki PHP, które pobierają dane z bazy danych i po odpowiednim ich sformatowaniu zwracają

dataType

Typ danych, jakich ma oczekiwać metoda. W naszym przykładzie to JSON, ale może być kilka innych np XML,HTML,text.

beforeSend

Kod, który zostanie wykonany przed rozpoczęciem pobierania danych. W naszym przypadku wykorzystujemy funkcje anonimową, w której czyścimy zawartość treści i tytułu strony i za pomocą metody .show() pokazujemy div z informacją o ładowaniu się danych

success

Ta funkcja wykona się jeśli pobieranie danych zakończy się sukcesem. Jako argument przyjmujemy obiekt zwrócony przez wywołany plik (obj). Wewnątrz za pomocą metody html() dodajemy zawartość strony i jej tytuł do naszego szkieletu strony. Dostęp do danych w objekcie obj mamy za pomocą kropek.

error

Funkcja, która wykona się, gdyby z jakiegoś powodu nie udało się pobrać danych np. plik nie istnieje. U nas funkcja wyświetla odpowiedni komunikat.

complete

Ta funkcja wykona się po zakończonym pobieraniu danych, niezależnie od tego czy się powiodło czy nie. Za jej pomocą ukrywamy element strony informujący o pobieraniu danych.

Teraz po kliknięciu w link podczas ładowania strony wyświetli się komunikat ładowaniu danych, dzięki czemu użytkownik nie będzie miał wrażenia, że nic się nie dzieje - zwłaszcza jeśli pobieranie trwa dłużej.

informacja o ładowaniu się danych
informacja o ładowaniu się danych

Jeśli stworzycie tak prostą stronę jak ja i będziecie testować to lokalnie, to prawdopodobnie nie zobaczycie komunikatu, albo tylko "błyśnie". To dlatego, że dane są tak pobierane w ułamku sekundy. Sposobem na zobaczenie komunikatu jest użycie php zamiast plików html i na ich początku użycie funkcji sleep(x) gdzie x to ilość sekund, na ile zostanie wstrzymany skrypt.

Po załadowaniu przykładowej strony z ofertą zobaczymy:

Podsumowanie

Na dzisiaj to tyle. Mam nadzieję, że przybliżyłem Wam temat. W następnej części opiszę jak wysyłać dane do serwera i przyjmować odpowiedź. Zrobimy to na przykładzie formularza kontaktowego.

Link

Link do działającego przykladu: http://przyklady.blog.abryser.pl/jquery1/index.html

HTML w JSON

Ponieważ pojawiły się wątpliwości w komentarzach zaktualizowałem przykład w linku o taki, w którym przez JSON wysyłany jest tekst zawierający HTML i CSS. Po kliknięciu linku "Usługi" wysyłane do przeglądarki jest coś takiego:

{"tytul":"Usługi","tresc":"<style type=\"text\/css\">\r\n.jakasKlasa{color:red}\r\n<\/style><p>Nasze usługi - tutaj jest ich opis<br \/>Lista usług:<\/p><ul class=\"jakasKlasa\"><li>Usługa 1<\/li><li>Usługa 2<\/li><li>Usługa 3<\/li><li>Usługa 4<\/li><\/ul>"}

Cała rzecz w tym, żeby odpowiednie znaki (ukośniki, cudzysłowy) poprzedzić znakiem backslash.

Część 2

http://www.dobreprogramy.pl/slepciu/AJAX-i-jQuery-cz,31833.html

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.