Ajax. Wzorce i najlepsze rozwi¹zania
|
|
- Bogusław Świderski
- 8 lat temu
- Przeglądów:
Transkrypt
1 Ajax. Wzorce i najlepsze rozwi¹zania Autor: Christian Gross T³umaczenie: Maciej Jezierski ISBN: Tytu³ orygina³u: Ajax Patterns and Best Practices Format: B5, stron: 392 Wydawnictwo Helion ul. Koœciuszki 1c Gliwice tel helion@helion.pl Ajax to nowoczesna technologia umo liwiaj¹ca budowanie witryn internetowych nowej generacji. Oddzielenie klienta od serwera i zastosowanie us³ug internetowych pozwala na tworzenie aplikacji ³¹cz¹cych w sobie atrakcyjny i szybki interfejs, znany ze standardowych programów, z zaletami korzystania ze stron WWW. Dziêki temu mo emy obni yæ koszty produkcji, zapewniæ b³yskawiczny dostêp do nowych danych i aktualizacji czy u³atwiæ u ywanie aplikacji z dowolnego komputera na œwiecie maj¹cego dostêp do sieci WWW. Ponadto Ajax bazuje na standardowych technologiach, zatem mo na stosowaæ go na wszystkich platformach. Ksi¹ ka Ajax. Wzorce i najlepsze rozwi¹zania rozpoczyna siê od wprowadzenia do tego podejœcia. Tam te znajdziesz opis zwi¹zanych z nim mechanizmów, takich jak architektura REST czy obiekty XMLHttpRequest, co pozwoli Ci szybko zrozumieæ funkcjonowanie i zalety tej technologii. Jednak g³ówn¹ czêœæ ksi¹ ki stanowi¹ praktyczne wzorce. Dziêki nim dowiesz siê, jak usprawniæ wczytywanie aplikacji poprzez stopniowe pobieranie kodu HTML, jak przyspieszyæ dzia³anie witryny za pomoc¹ pamiêci podrêcznej, a tak e jak dynamicznie modyfikowaæ zawartoœæ stron. Nauczysz siê te zwiêkszaæ komfort pracy u ytkowników poprzez tworzenie wygodnego i niezawodnego systemu nawigacyjnego oraz sprawne pobieranie danych. W ksi¹ ce omówiono: Funkcjonowanie technologii Ajax Architektura REST Obiekty XMLHttpRequest Stopniowe wczytywanie stron Obs³uga pamiêci podrêcznej Przetwarzanie i reprezentacja danych Obs³uga nawigacji Dynamiczne modyfikowanie stron Sta³a komunikacja miêdzy serwerem a klientem Stosuj sprawdzone wzorce i najlepsze praktyki budowania witryn internetowych
2 O autorze... 9 Wstęp Rozdział 1. Wprowadzenie do Ajaksa Obraz znaczy więcej niż tysiąc słów Kolejny przykład Ajaksa Podstawy architektury Ajaksa Dane Nawigacja Porównanie Ajaksa do innych typów aplikacji Rozbudowana aplikacja kliencka instalowana lokalnie Usługi internetowe z rozbudowaną aplikacją kliencką Zwykła aplikacja sieciowa Kilka uwag na koniec Rozdział 2. Ajax od środka Ajax dla niecierpliwych REST w teorii Implementowanie danych w REST Implementowanie aplikacji ajaksowej Łączenie Ajaksa i REST Konsekwencje Ajaksa i REST Szczegóły XMLHttpRequest Korzystanie ze wzorca Fabryka Definiowanie Fabryki XMLHttpRequest Użycie wzorca Fabryka w aplikacji ajaksowej Wykonywanie asynchronicznych żądań Praktyczne wykorzystanie XMLHttpRequest Implementowanie mechanizmu wywoływania asynchronicznego Wywoływanie domen innych niż domena serwisu Podsumowanie Rozdział 3. Wzorzec Fragmentacja Zawartości Cel Przyczyny wykorzystania wzorca Zastosowanie...64 Powiązane wzorce Architektura... 65
3 6 Ajax. Wzorce i najlepsze rozwiązania Implementowanie porządku w aplikacji internetowej Określanie zawartości wewnątrz jej fragmentu Implementacja Implementacja szkieletu strony HTML Umieszczanie zawartości przy użyciu dynamicznego HTML-a Fragmenty w postaci danych binarnych, URL i obrazków Fragmentacja JavaScriptu Najważniejsze elementy wzorca Rozdział 4. Wzorzec Kontroler Pamięci Podręcznej Cel Przyczyny wykorzystania wzorca Zastosowanie...91 Powiązane wzorce Architektura Dyrektywy pamięci podręcznej w HTTP i HTML Wykorzystanie pamięci podręcznej opartej na modelu wygasania HTTP to zły pomysł Lepsze podejście: wykorzystanie poprawności danych HTTP Kilka ciekawostek dotyczących pamięci podręcznej po stronie serwera Statyczna kontrola aktualności HTTP Dynamiczna kontrola aktualności HTTP Implementacja Implementacja pasywnej pamięci podręcznej Implementacja kontroli aktualności HTTP po stronie serwera Najważniejsze elementy wzorca Rozdział 5. Wzorzec Permutacje Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Dlaczego zasób jest oddzielony od reprezentacji? Wykorzystywanie cookie i uwierzytelniania HTTP tylko do autoryzowania dostępu Korzystanie z cookie Przykładowa aplikacja z książkami Implementacja Przepisywanie adresów URL Przykład aplikacji z koszykiem zakupów Najważniejsze elementy wzorca Rozdział 6. Wzorzec Podzielona Nawigacja Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Implementacja Implementacja funkcjonalności Działanie Definicja i implementacja funkcjonalności Wspólne Dane Implementacja funkcjonalności Prezentacja Wykorzystanie komponentów HTML Najważniejsze elementy wzorca
4 Spis treści 7 Rozdział 7. Wzorzec Przemienianie Reprezentacji Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Podstawy teorii wzorca Dlaczego wzorzec nie jest komponentem HTML? Określenie bloku stanu Implementacja Implementacja szkieletu Implementacja punktów odniesienia reprezentacji Szczegóły implementacji Najważniejsze elementy wzorca Rozdział 8. Wzorzec Trwała Komunikacja Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Dlaczego internet jest uszkodzony? Implementacja rozwiązania odpytującego serwer Implementacja Przykład: ogólny zasób statusu Przykład: wykrywanie obecności Przykład: wypychanie danych przez serwer Numery wersji i aktualizacje Problemy wydajnościowe Najważniejsze elementy wzorca Rozdział 9. Wzorzec Stan Nawigacji Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Rozwiązania bliskie idealnemu z punktu widzenia użytkownika Rozszerzenie rozwiązania dla celów aplikacji internetowej Zarządzanie stanem na poziomie protokołu Implementacja Przetwarzanie stanu po stronie klienta Przetwarzanie żądań po stronie serwera Najważniejsze elementy wzorca Rozdział 10. Wzorzec Nieskończone Dane Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Implementacja Implementacja klienta HTML Implementacja zarządzania zadaniami Najważniejsze elementy wzorca
5 8 Ajax. Wzorce i najlepsze rozwiązania Rozdział 11. Wzorzec Model Widok Kontroler oparty na REST Cel Przyczyny wykorzystania wzorca Zastosowanie Powiązane wzorce Architektura Ogólny obraz Definiowanie odpowiedniego zasobu Definicja interfejsu wywołującego Definicja podstawowego i rozszerzonego formatu danych Implementacja Implementacja wyszukiwania Tworzenie infrastruktury klienta wyszukiwarki Połączenie wszystkiego ze sobą Najważniejsze elementy wzorca Skorowidz
6 Rozdział 3. Cel Wzorzec Fragmentacja Zawartości umożliwia stopniowe budowanie strony HTML. Dzięki temu logika pojedynczej strony HTML może być rozproszona, a użytkownik może decydować o czasie i fragmencie logiki, który ma być pobrany. Przyczyny wykorzystania wzorca W czasie, kiedy strony internetowe dopiero zaczynały powstawać, projektanci zawartości HTML tworzyli dokumenty, które były niekompletne. Niekompletne strony były uzupełniane za pomocą łączy do innych dokumentów. Cały dokument był sumą stron w drzewie dokumentów. Pomyśl o tym następująco: zamiast tworzyć książkę, której zawartość czytasz strona po stronie, w przypadku witryny internetowej zebrałbyś materiały razem jak artykuły w gazecie. Ale w przeciwieństwie do gazety, która wymaga przewracania stron, witryna internetowa umożliwia kliknięcie i przeskoczenie do innej zawartości. W miarę upływu czasu witryny internetowe odchodziły od struktury rozproszonej do ściśle samodzielnej struktury hierarchicznej. Przykład strony o ściśle samodzielnej strukturze hierarchicznej został pokazany na rysunku 3.1.
7 64 Ajax. Wzorce i najlepsze rozwiązania Rysunek 3.1. Ścisła struktura hierarchiczna witryny internetowej Na rysunku 3.1 strona internetowa została podzielona na dwie części nawigacyjną z niebieskim tłem i zawartość z brązowym tłem. Kiedy użytkownik kliknie łącze nawigacyjne, zmienia się zawartość. Problem leży w tym, że przeładowywana jest cała strona, nawet jeśli użytkownik jest zainteresowany tylko zawartością z brązowym tłem. Jednym ze sposobów na obejście tego problemu byłoby użycie ramek HTML, tak żeby część nawigacyjna znajdowała się w jednej ramce, a zawartość w drugiej. Po kliknięciu łącza nawigacyjnego zmieniałaby się tylko ramka z zawartością. Jednak, jak pokazał czas, mimo że ramki rozwiązują problem osobnego pobierania zawartości, są problematyczne z perspektywy nawigacji i interfejsu użytkownika. Dlatego też w witrynach internetowych ramki są używane w coraz mniejszym stopniu. Dla twórcy witryny internetowej najlepszym rozwiązaniem byłaby możliwość zmieniania tylko tej części zawartości, która powinna zostać zmieniona, i pozostawienia reszty bez zmian. W końcu zawartość, której nie musimy zmieniać, działa. Zastosowanie Używaj wzorca Fragmentacja Zawartości w następujących sytuacjach: Rodzaj witryny powoduje, że nie wiadomo, jak powinna wyglądać strona HTML. Na rysunku 3.1 znajduje się część nawigacyjna z niebieskim tłem i część z zawartością na brązowym tle. Nie jest znana zawartość żadnej z części, ale wiadomo, gdzie znajduje się część z zawartością.
8 Rozdział 3. Wzorzec Fragmentacja Zawartości 65 Zawartość do pobrania jest zbyt duża i mogłaby spowodować, że użytkownik długo czekałby na jej wyświetlenie. Na przykład wyszukiwanie i oczekiwanie na zebranie wszystkich wyników nie jest dobrym wyjściem, ponieważ użytkownik mógłby zbyt długo czekać. Lepszym podejściem byłoby wykonywanie wyszukiwania i wyświetlanie wyników w miarę ich znajdowania. Wyświetlana zawartość nie jest powiązana. Yahoo!, MSN i Excite są aplikacjami portalowymi wyświetlającymi jedną zawartość obok innej, zupełnie z nią niezwiązanej. Jeśli zawartość miałaby być generowana z pojedynczej strony HTML, logika po stronie serwera musiałaby zawierać olbrzymi blok decyzyjny, żeby wiedzieć, która zawartość została pobrana, a która nie. Lepszym podejściem jest uznanie każdego bloku za odrębną część, która jest oddzielnie pobierana. Powiązane wzorce Fragmentacja Zawartości jest podstawowym wzorcem każdej aplikacji ajaksowej, Możesz nawet założyć, że zastosowanie tego wzorca wynika wprost z zastosowania Ajaksa. Tak czy inaczej, wciąż trzeba zidentyfikować i określić kontekst wzorca Fragmentacja Zawartości. Jego unikalną cechą jest to, że korzystanie z niego polega na wykonywaniu zawsze tych samych kroków, do których należą: wygenerowanie zdarzenia, żądanie, odpowiedź i wstawienie części zawartości. Inne wzorce omówione w tej książce są podobne, mają jednak różne odchylenia, takie jak wykonanie żądania i niepobieranie zawartości od razu (na przykład wzorzec Trwała Komunikacja). Architektura Architektura wzorca Fragmentacja Zawartości jest stosunkowo prosta. Klient wywołuje URL. Serwer wysyła odpowiedź z jakąś zawartością, która jest następnie odbierana i przetwarzana przez klienta. Implementacja wzorca Fragmentacja Zawartości zawsze wykonuje następujące kroki: 1. Generowane jest zdarzenie, które może być wynikiem naciśnięcia przycisku albo pobrania strony HTML. 2. Zdarzenie wywołuje funkcję, która jest odpowiedzialna za stworzenie adresu URL używanego do wysłania żądania do klienta. 3. Serwer odbiera żądanie i na jego podstawie tworzy jakąś zawartość. Zawartość jest wysyłana jako odpowiedź do klienta. 4. Klient otrzymuje odpowiedź i umieszcza ją w odpowiednim miejscu strony HTML.
9 66 Ajax. Wzorce i najlepsze rozwiązania Implementowanie porządku w aplikacji internetowej Po ponownym spojrzeniu na rysunek 3.1 można stwierdzić, że ściśle hierarchiczna struktura strony internetowej nie jest złą rzeczą. Użycie HTML powoduje, że w wyniku zastosowania takiej struktury trzeba generować zawartość w jednym kroku. Właśnie to całościowe tworzenie zawartości powoduje problemy. Tradycyjne aplikacje nie działają w ten sposób, co widać na rysunku 3.2. Rysunek 3.2. Tradycyjna aplikacja kliencka Na rysunku 3.2 znajduje się RealPlayer, który jest przykładem tradycyjnej aplikacji klienckiej mieszającej nowsze technologie oparte na HTML z tradycyjnymi elementami interfejsu użytkownika. Kliknięcie przycisku Burn Your CD spowoduje, że RealPlayer nagra Twoją płytę CD, ale nie spowoduje zmian w reklamie znajdującej się na górnej połowie aplikacji. Logika związana z reklamą i ta związana z nagrywaniem płyt to dwa oddzielne fragmenty logiki, które akurat są wykorzystywane w tym samym oknie. Na rysunku 3.3 z aplikacji internetowej z rysunku 3.1 wydzielono odrębne fragmenty logiki. Oryginalna strona HTML na rysunku 3.3 zawiera łącza do dwóch innych stron, które reprezentują przykładowy blog i zawartość artykułu. Przykładowa zawartość ma dwa bloki wykonawcze Pobierz Nawigację i Pobierz Zawartość (1,2). Logika użyta do wygenerowania Pobierz Zawartość 1 jest inna niż ta użyta do wygenerowania Pobierz Zawartość 2. W kontekście generowania strony HTML, kiedy wykonywana jest logika Pobierz Zawartość 1 czy Pobierz Zawartość 2, wykonywana jest także logika Pobierz Nawigację. Oznacza to, że logika Pobierz Zawartość jest wykonywana wielokrotnie w celu wygenerowania tej samej zawartości. Niektórzy czytelnicy mogą się kłócić, że Pobierz Nawigację generuje różne dane (na przykład różne foldery są otwarte), ale w rzeczywistości są to te same dane tylko inaczej sformatowane. Krótko mówiąc, występuje tu nadmiarowe generowanie danych, które powinno być unikane.
10 Rozdział 3. Wzorzec Fragmentacja Zawartości 67 Rysunek 3.3. Architektura witryny internetowej Rozwiązaniem jest rozproszenie logiki, dzięki czemu strona HTML będzie generowana przy użyciu architektury podobnej do przedstawionej na rysunku 3.4. Rysunek 3.4. Ulepszona architektura strony internetowej
11 68 Ajax. Wzorce i najlepsze rozwiązania Strona na rysunku 3.4 jest złożeniem wielu fragmentów logiki umieszczonej po stronie serwera. Po pobraniu szkieletu strony HTML obiekt XMLHttpRequest pobiera zawartość bloków Pobierz Nawigację, Pobierz Zawartość 1 i Pobierz Zawartość 2. To, kiedy i jak pobierane są poszczególne bloki zawartości, zależy od tworzonych przez nie zdarzeń i łączy. Każdy blok zawartości jest oddzielnym żądaniem, które musi zostać wywołane przez typ XMLHttpRequest. Proponowana architektura ma następujące zalety: Klient pobiera tylko to, co konieczne, i tylko wtedy, kiedy to konieczne. Nie ma potrzeby ponownego pobierania bloku zawartości, chyba że jest to niezbędne. Architektura jest rozdzielona na różne bloki kodu, które mogą być dynamicznie łączone w różnych kontekstach. Architektura podobna do tej w przypadku tradycyjnej aplikacji klienckiej w tym, że modyfikuje się tylko te elementy, których dotyczą zdarzenia. Całościowy wygląd aplikacji nie zmienia się, ponieważ wygenerowane bloki kodu składają się na wygląd strony HTML, która je pobiera. Na rysunku 3.4 widać, skąd wziął swoją nazwę wzorzec Fragmentacja Zawartości: zawartość pojedynczej strony jest sumą fragmentów, na które została ona podzielona. Każdy z tych bloków jest obsługiwany i pobierany osobno. Określanie zawartości wewnątrz jej fragmentu Fragmenty zawartości, do których odwołuje się obiekt XMLHttpRequest, mogą mieć dowolny format zrozumiały zarówno dla serwera, jak i klienta. Cokolwiek wyśle serwer, musi być to zrozumiałe dla klienta. Na rysunku 3.4 fragmenty zawartości będą w HTML, ponieważ zostaną umieszczone bezpośrednio w stronie HTML. Jednak HTML nie jest jedynym formatem, który może być wysłany przez serwer. W tym rozdziale omówione będą następujące formaty: HTML. Serwer może wysłać HTML bezpośrednio do klienta. Otrzymany HTML nie jest przetwarzany, lecz bezpośrednio umieszczany w stronie HTML. Jest to podejście ślepego przetwarzania, ponieważ klient nie wie, co wykonuje pobrany kod HTML. Bezpośrednie umieszczanie kodu HTML jest bardzo prostym i idiotoodpornym sposobem budowania zawartości. Klient nie musi niczego przetwarzać, wystarczy tylko, że zna miejsce, w którym ma zostać umieszczony kod HTML. Jeśli przetwarzanie będzie konieczne, pobrana zawartość (o ile jest zgodna z XML-em) będzie również dostępna w postaci instancji modelu obiektowego. Instancja modelu obiektowego pozwala na ręczne zmienianie zawartości HTML. Zaleca się, żeby HTML wysyłany do klienta był zgodny z XHTML-em (HTML-em, który jest implementacją odpowiedniego schematu XML) albo przynajmniej z XML-em. Obrazki. Nie ma możliwości bezpośredniego wysyłania obrazków, ponieważ mają one postać binarną, a obiekt XMLHttpRequest nie może
12 Rozdział 3. Wzorzec Fragmentacja Zawartości 69 przetwarzać takich danych. Zazwyczaj odnośniki do obrazków są wysyłane w postaci znaczników HTML. Te są następnie umieszczane w dokumencie HTML, co powoduje pobranie zdalnych obrazków. Można pobierać binarne dane i korzystać z tych, które zostały zakodowane, przesłane, a następnie zdekodowane przy użyciu kodowania Base64. Jednakże operacje na danych binarnych nie są zalecane, ponieważ powodują więcej problemów niż korzyści. JavaScript. Serwer może wysłać do klienta JavaScript, który może być wykonany za pomocą instrukcji eval, a klient może wysyłać istniejące obiekty JavaScriptu do serwera w celu dalszego przetwarzania. Na pierwszy rzut oka może wydawać się, że wykonywanie pobranych JavaScriptów jest potencjalnie niebezpieczne. Zazwyczaj jednak nie jest to problemem, ponieważ implementacje JavaScriptu we wszystkich przeglądarkach używają polityki tego samego źródła i piaskownicy. Wysyłanie zewnętrznego JavaScriptu do wykonania może być problemem bezpieczeństwa, jeśli w implementacji języka JavaScript znajduje się błąd. Wysyłanie JavaScriptu jest pożądane, jeśli chcesz dynamicznie wykonywać i dodawać logikę, która nie została pobrana wraz z początkową stroną HTML. Ta metoda daje bardzo duże możliwości rozbudowy funkcjonalności klienta, który nie musi nawet o tym wiedzieć. Na przykład element formularza HTML wymaga sprawdzenia poprawności. Ponieważ dla różnych użytkowników inaczej sprawdzana jest poprawność, wysyłanie wszystkich implementacji sprawdzania poprawności byłoby niepożądane. Rozwiązaniem mogłoby być umożliwienie określenia, które elementy formularza będą prezentowane, i następnie dynamiczne ładowanie odpowiedniej implementacji sprawdzania poprawności jako fragmentu zawartości. Pamiętaj jednak o tym, że przesyłanie fragmentów JavaScriptu może narazić Twoją aplikację na atak hakerów. Dlatego też dobrze przemyśl użycie tej techniki. XML. Preferowanym podejściem jest wysyłanie i odbieranie danych w postaci XML. XML może być przetworzony albo sparsowany po stronie klienta za pomocą obiektowego modelu XML lub poprzez użycie biblioteki XSLT (ang. Extensible Stylesheet Language Transformations transformacje rozszerzalnego języka arkuszy stylów), która może przekształcić go na inny model obiektowy, taki jak HTML. XML jest preferowany, ponieważ stanowi dobrze poznaną technologię, a narzędzia do wykonywania na nim operacji są sprawdzone, działające i stabilne. XML jest technologią o uznanej pozycji, dzięki czemu stworzone w niej dokumenty możesz przeszukiwać, rozdzielać i tworzyć, a także sprawdzać ich poprawność bez potrzeby pisania dodatkowego kodu. Niektórzy uważają, że XML ma duże rozmiary z powodu dużej liczby nawiasów ostrych i innych znaczników XML. Jednak zaletą tego jest to, że XML wygenerowany przez aplikację po stronie serwera może być przetworzony zarówno przez klienta opartego na przeglądarce internetowej, jak i klienta bez graficznego interfejsu użytkownika. Wybór sposobu parsowania XML-a i informacji, które należy przetwarzać, w całości zależy od klienta, o ile potrafi on parsować XML. XML jest elastyczny i powinno się z niego korzystać. Będzie on bardzo często wykorzystywany w tej książce i traktowany jako podstawowy format wymiany danych.
13 70 Ajax. Wzorce i najlepsze rozwiązania Są inne metody wymiany danych, takie jak JSON (ang. JavaScript Object Notation zapis obiektów JavaScript) 1. Jednakże radzę dobrze przemyśleć konsekwencje wynikające z wyboru innych formatów. Nie chodzi o to, że uważam je za źle zaprojektowane czy nieodpowiednie. Tym, co mnie do nich nie przekonuje, jest to, że nie udostępniają one tak rozbudowanego środowiska do przetwarzania, wyszukiwania, sprawdzania poprawności i tworzenia jak XML. Na przykład przy użyciu XPath mogę wyszukać konkretne elementy w XML-u bez parsowania całego dokumentu XML. Oczywiście, w niektórych przypadkach XML może nie zapewniać takiej wydajności jak na przykład JSON. Dla czytelników, którzy są pewni, że nigdy nie będą potrzebowali rozbudowanych funkcji XML-a, JSON może być odpowiedni. W tej książce nie będę jednak omawiał innych technologii takich jak JSON. Teraz, kiedy już poznałeś architekturę, możemy przejść do przedstawienia implementacji demonstrujących sposób jej realizacji. Implementacja Podczas implementacji wzorca Fragmentacja Zawartości należy postępować według wcześniej wymienionych kroków (zdarzenie, żądanie, odpowiedź, umieszczenie). Logikę można łatwo zaimplementować, używając obiektu Asynchronous, ponieważ istnieje możliwość wywołania go przez zdarzenie i zawiera on bezpośrednią implementację metody do pobierania odpowiedzi z serwera. Poniżej przedstawię przykładową implementację, która zilustruje, jak generować zdarzenia w HTML-u, wywoływać funkcje, tworzyć żądania za pomocą XMLHttpRequest oraz przetwarzać odpowiedzi, używając dynamicznego HTML-a i JavaScriptu. Implementacja szkieletu strony HTML Implementacja wzorca Fragmentacja Zawartości wymaga stworzenia strony HTML służącej jako szkielet. Zastosowanie szkieletu pozwoli udostępnić strukturę, w której umieszczane będą fragmenty zawartości. Strona zawierająca szkielet jest kontrolerem i ma minimalną zawartość. Poniższy kod HTML jest przykładem szkieletowej strony HTML, w której będą dynamicznie umieszczane fragmenty zawartości: <html> <head> <title>fragment dokumentu HTML</title> <script language="javascript" src="/lib/factory.js"></script> <script language="javascript" src="/lib/asynchronous.js"></script> <script language="javascript" type="text/javascript"> var asynchronous = new Asynchronous(); asynchronous.complete = function(status, statustext, responsetext, responsexml) { document.getelementbyid("insertplace").innerhtml = responsetext; 1
14 Rozdział 3. Wzorzec Fragmentacja Zawartości 71 } </script> </head> <body onload="asynchronous.call('/chap03/chunkhtml01.html')"> <table> <tr><td id="insertplace">brak zawartości</td></tr> </table> </body> </html> W powyższym kodzie HTML tworzona jest instancja klasy Asynchronous i przypisywana funkcja zwrotna do właściwości asynchronous.complete. Sposób działania klasy Asynchronous oraz właściwości, do których należy przypisać odpowiednie wartości, zostały opisane w rozdziale 2. Instancja asynchronous jest tworzona po wczytaniu strony HTML. Po wczytaniu całej strony wykonywane jest zdarzenie onload. Jest to pierwszy krok implementacji wzorca: wygenerowanie zdarzenia. Zdarzenie onload wywołuje metodę asynchronous.call, która wykonuje żądanie XMLHttpRequest w celu pobrania fragmentu HTML. Jest to drugi krok implementacji wzorca: wykonanie żądania. Po zakończeniu żądania serwer generuje odpowiedź, która jest odbierana po stronie klienta poprzez wywołanie metody asynchronous.complete. Pobranie odpowiedzi jest kolejnym krokiem implementacji wzorca. W tym przykładzie do właściwości asynchronous.complete jest przypisana anonimowa funkcja JavaScriptu. Żeby umieścić wyniki żądania XMLHttpRequest w elemencie HTML, w jej implementacji wywoływana jest metoda getelementbyid. Element HTML, w tym przypadku znacznik HTML td, jest odnajdywany poprzez identyfikator insertplace. Umieszczenie wyników w kodzie HTML polegające na odwołaniu się do elementu HTML i przypisaniu do jego własności inner- HTML wyników żądania jest ostatnim krokiem implementacji wzorca. Niespotykaną dotąd rzeczą jest w tym przykładzie to, że po wczytaniu i przetworzeniu strony HTML na stronie, która jest uważana za kompletną, wywoływany jest inny fragment logiki. Używa się go do pobrania reszty zawartości w postaci fragmentu zawartości. Kod po stronie serwera mógłby przecież wygenerować całą stronę. Jednak w ten sposób można pokazać, jak prosta może być implementacja wzorca Fragmentacja Zawartości. Przykład ilustruje reakcję na zdarzenie onload, ale można użyć dowolnego zdarzenia. Przykłady w rozdziale 2. używały zdarzenia wywoływanego naciśnięciem przycisku. Skrypt mógłby nawet emulować zdarzenia poprzez użycie metody Click(). Powyższy przykład ilustruje oddzielenie wyglądu strony HTML od jej logiki. W części strony, w której umieszczana jest zawartość, projektant HTML musiałby tylko zamarkować miejsce, na przykład wpisując w nie jakiś tekst. Programista aplikacji po stronie serwera tworzyłby zawartość, która następnie zastępowałaby tekst w zamarkowanym miejscu. Projektant HTML nie musi przejmować się jakąkolwiek technologią programowania po stronie serwera, ponieważ szkielet strony HTML zawiera tylko instrukcje wykonywane po stronie klienta. Programista aplikacji po stronie serwera nie musi przejmować się wyglądem strony HTML, ponieważ tworzona przez niego zawartość nie zawiera żadnych informacji, które dotyczą wyglądu. W czasie testów programista aplikacji internetowej skupia się na logice, podczas gdy projektant HTML skupia się na jej wyglądzie i zachowaniu.
15 72 Ajax. Wzorce i najlepsze rozwiązania Umieszczanie zawartości przy użyciu dynamicznego HTML-a Magia tego przykładu tkwi w zdolności dynamicznego HTML-a do dynamicznego umieszczania zawartości w określonym miejscu. Zanim pojawił się dynamiczny HTML, do połączenia wielu strumieni danych trzeba było używać ramek albo logiki po stronie serwera. Kilka lat temu dynamiczny HTML został formalnie ustandaryzowany przez World Wide Web Consortium (W3C) jako HTML DOM (ang. HTML Document Object Model obiektowy model dokumentu HTML). DOM określony przez W3C nie jest tak rozbudowany jak modele obiektowe dostępne w Internet Explorerze Microsoftu czy przeglądarkach wywodzących się z Mozilli. Model obiektowy używany w tej książce jest mieszaniną HTML DOM i funkcji dostępnych w większości przeglądarek (na przykład w Internet Explorerze oraz w wywodzących się z Mozilli). W poprzednim przykładzie atrybut id unikalnie identyfikuje element na stronie HTML. Dzięki unikalnie identyfikowanemu elementowi można określić miejsce początkowe, od którego możliwa jest nawigacja i manipulowanie obiektowym modelem HTML. Innym sposobem na znalezienie miejsca początkowego jest bezpośrednie określenie typu znacznika i na jego podstawie znalezienie odpowiedniego elementu HTML. Bez względu na to, które podejście zastosujesz, jedno z nich musi zostać użyte do pobrania miejsca początkowego. Niektórzy czytelnicy mogą mówić, że mógłbyś użyć innych właściwości czy metod, ale nie są one kompatybilne z HTML DOM i dlatego powinno się ich unikać. Następujący kod HTML demonstruje, jak znaleźć punkt początkowy przy użyciu dwóch podejść: <html> <head> <title>fragment dokumentu HTML</title> <script language="javascript" src="/lib/factory.js"></script> <script language="javascript" src="/lib/asynchronous.js"></script> <script language="javascript" type="text/javascript"> var asynchronous = new Asynchronous(); asynchronous.complete = function(status, statustext, responsetext, responsexml) { document.getelementsbytagname("table")[ 0].rows[ 0].cells[ 0].innerHTML = responsetext; document.getelementbyid("insertplace").innerhtml = responsetext; } </script> </head> <body onload="asynchronous.call('/chap03/chunkhtml01.html')"> <table> <tr><td>brak zawartości</td></tr> <tr><td id="insertplace">brak zawartości</td></tr> </table> </body> </html>
16 Rozdział 3. Wzorzec Fragmentacja Zawartości 73 W implementacji anonimowej funkcji dla metody asynchronous.complete do umieszczenia zawartości w elemencie dynamicznego HTML-a wykorzystane są dwie metody (getelementsbytagname, getelementbyid). Obydwie pobierają element reprezentujący (elementy reprezentujące) punkt początkowy. Metoda getelementsbytagname pobiera wszystkie elementy HTML o typie określonym przez przekazany parametr. W tym przykładzie parametrem jest table. Wskazuje on, że z dokumentu mają zostać pobrane wszystkie elementy typu table. Zwracana jest instancja kolekcji HTMLCollection zawierająca w tym przykładzie wszystkie elementy typu table. Klasa HTMLCollection ma właściwość length, która określa, ile elementów zostało znalezionych. Do znalezionych elementów można się odwoływać za pomocą zapisu służącego do odwoływania się do elementów tablicy w JavaScripcie (nawiasy kwadratowe), przy czym indeksem pierwszego elementu jest 0. W tym przykładzie zaraz po identyfikatorze metody getelementsbytagname("table") znajduje się kilka nawiasów kwadratowych ([[0) służących do pobrania pierwszego elementu kolekcji. Indeks zerowy jest tu użyty odgórnie i oznacza odniesienie do pierwszej znalezionej tabeli. Indeks użyty w tym przykładzie jest prawidłowy tylko dlatego, że na stronie HTML znajduje się jedna tabela. Z tego powodu indeks zerowy w tym przykładzie zawsze będzie prawidłowy, co oznacza, że będzie odwoływał się do odpowiedniej tabeli, wiersza i komórki. Wyobraź sobie jednak sytuację, w której na stronie znajduje się wiele tabel. W takim przypadku używanie z góry określonego indeksu może, ale nie musi się wiązać z odwołaniem do odpowiedniej tabeli. Co gorsza, jeśli wzorzec Fragmentacja Zawartości był wielokrotnie wywoływany, kolejność znalezionych elementów może ulec zmianie, co spowoduje, że wystąpią odwołania do niewłaściwych elementów. Metody getelementsbytagname najlepiej używać tylko w przypadku, gdy operacje są wykonywane na wszystkich znalezionych elementach i nie ma potrzeby ich rozróżniania. Do przykładów takich operacji można zaliczyć dodawanie kolumny w tabeli czy zmianę stylu. Do operacji na pojedynczych elementach najlepiej użyć metody getelementbyid. Za pomocą metody getelementsbytagname można pobrać wszystkie elementy w dokumencie HTML. Ilustruje to poniższy przykład: var collection = document.getelementsbytagname("*"); Wywołanie metody getelementsbytagname z gwiazdką jako parametrem powoduje pobranie wszystkich elementów dokumentu HTML. Niektórzy mogą zauważyć, że można to samo osiągnąć, odczytując właściwość document.all. Chociaż jest to prawda, właściwość ta nie jest zgodna z DOM i spowoduje wyświetlenie ostrzeżeń w przeglądarkach opartych na Mozilli. Przyjrzyjmy się następującemu fragmentowi przykładowego kodu: document.getelementsbytagname("table")[0].rows[0].cells[0].innerhtml Identyfikatory po nawiasach kwadratowych metody getelementsbytagname reprezentują wywoływane właściwości i metody. Odnoszą się one bezpośrednio do pobranego obiektu, który w tym przypadku jest tabelą zawierającą wiersze i komórki. Jeśli pobrany element nie byłby tabelą, wywołanie tych właściwości i metod spowodowałoby powstanie błędu.
17 74 Ajax. Wzorce i najlepsze rozwiązania Powróćmy do przykładowego kodu źródłowego i przyjrzyjmy się temu fragmentowi: document.getelementbyid("insertplace").innerhtml = responsetext; Metoda getelementbyid pobiera element HTML z podanym atrybutem id. W atrybucie id ważna jest wielkość liter. Wynikiem wywołania tej metody jest pobranie znacznika td z atrybutem id o wartości insertplace. Jeśli w dokumencie znajdowałoby się wiele elementów z takim samym atrybutem id, wywołanie metody getelementbyid spowodowałoby pobranie tylko pierwszego znalezionego elementu. Pozostałe elementy nie są zwracane i będą niedostępne, ponieważ metoda getelementbyid zwraca tylko instancję pojedynczego elementu HTML. W przeciwieństwie do metody getelementsbytag- Name, nie ma gwarancji, że zwrócony element będzie miał określony typ, inny niż typ elementu, którego atrybut id jest taki sam, jak parametr przekazywany podczas wywoływania metody getelementbyid. Dlatego też model obiektowy, którego używamy po wywołaniu tej metody, może, ale nie musi być odpowiedni dla pobranego elementu. W przypadku właściwości innerhtml nie stanowi to problemu, ponieważ mają ją niemal wszystkie widoczne elementy. Problem może się pojawić, jeśli założymy, że pobrany element jest tabelą, podczas gdy w rzeczywistości będzie on komórką tabeli. W takim wypadku zastosowanie do niego modelu obiektowego tabeli spowoduje powstanie wyjątku. Podczas pisania kodu w JavaScripcie dobrą praktyką jest sprawdzanie pobranego elementu przed wykonaniem na nim jakichkolwiek działań. Musisz założyć, że podczas używania getelementsbytagname wiesz, jaki typ będą miały elementy HTML, ale nie wiesz, gdzie się znajdują ani co reprezentują. Z kolei podczas używania getelement- ById wiesz, co reprezentuje i gdzie się znajduje element, ale nie znasz jego typu i, co się z tym wiąże, hierarchii obiektów. Szczególna natura innerhtml Właściwość innerhtml jest szczególna, ponieważ wydaje się łatwa w użyciu, ale korzystanie z niej może wiązać się z poważnymi konsekwencjami. Żeby pokazać, gdzie leży problem, przyjrzyjmy się następującemu kodowi HTML: <html> <head> <title>fragment dokumentu HTML</title> <script language="javascript" type="text/javascript"> function foodteplace() { document.getelementbyid("mycell").innerhtml = "witaj"; } function Badteplace() { document.getelementbyid("mytable").innerhtml = "witaj"; } function TestTable() { window.alert(document.getelementsbytagname( "table")[0].rows[0].cells[0].innerhtml); } </script> </head> <body> <button onclick="foodteplace()">prawidłowa wymiana</button>
18 Rozdział 3. Wzorzec Fragmentacja Zawartości 75 Rysunek 3.5. Początkowa strona HTML <button onclick="badteplace()">nieprawidłowa wymiana</button> <button onclick="testtable()">sprawdź tabelę</button> <table id="mytable" border="1"> <tr id="myrow"><td id="mycell">brak zawartości</td><td>druga kom rka</td></tr> </table> </body> </html> W powyższym przykładzie znajdują się trzy przyciski (Prawidłowa wymiana, Nieprawidłowa wymiana i Sprawdź tabelę), a elementom HTML tabeli, jej wierszowi i komórce nadano identyfikatory. Naciśnięcie przycisku Prawidłowa wymiana spowoduje prawidłowe umieszczenie kodu HTML. Naciśnięcie przycisku Nieprawidłowa wymiana spowoduje nieprawidłowe umieszczenie kodu HTML. Przycisk Sprawdź tabelę jest używany do sprawdzenia wyników umieszczenia HTML wykonanego przez naciśnięcie Prawidłowa wymiana albo Nieprawidłowa wymiana. Efekt pobrania strony HTML do przeglądarki będzie podobny do rysunku 3.5. Żeby sprawdzić, czy strona HTML jest prawidłowa, należy nacisnąć przycisk Sprawdź tabelę. Spowoduje to wywołanie funkcji TestTable, która sprawdza, czy istnieje zawartość wewnątrz komórek tabeli, a jeśli tak, to wyświetla ją w okienku dialogowym. Okienko dialogowe powinno wyglądać podobnie do przedstawionego na rysunku 3.6. Okienko dialogowe na rysunku 3.6 potwierdza, że komórka tabeli zawiera wartość Brak zawartości. Oznacza to, że strona HTML jest prawidłowa. Po naciśnięciu przycisku Prawidłowa wymiana wywoływana jest funkcja GoodReplace zmieniająca zawartość komórki tabeli z Brak zawartości na witaj. Żeby sprawdzić, czy strona HTML jest nadal prawidłowa, należy nacisnąć przycisk Sprawdź tabelę. Jeśli strona HTML jest prawidłowa, powinno się pokazać okienko dialogowe z napisem witaj i tak się dzieje, co widać na rysunku 3.7.
19 76 Ajax. Wzorce i najlepsze rozwiązania Rysunek 3.6. Wyświetlenie zawartości komórki mycell Rysunek 3.7. Zmodyfikowana zawartość komórki mycell Spróbujmy rzecz nieco skomplikować przez naciśnięcie przycisku Nieprawidłowa wymiana. Spowoduje ono wywołanie funkcji BadReplace, która przypisuje nowy tekst do właściwości innerhtml tabeli HTML. Oznacza to, że zawartość HTML <table><tr> <td>...</table> zostaje zamieniona na <table>witaj</table>. Zmieniony HTML jest nieprawidłowy i zostanie wyświetlony tak, jak pokazano na rysunku 3.8. Na rysunku 3.8 widać, że wiersze tabeli zostały usunięte. Naciśnięcie przycisku Sprawdź tabelę w celu sprawdzenia poprawności strony spowoduje powstanie błędu przedstawionego na rysunku 3.9.
20 Rozdział 3. Wzorzec Fragmentacja Zawartości 77 Rysunek 3.8. Zawartość HTML po podmianie wierszy i komórek tabeli Rysunek 3.9. Wyjątek modelu obiektowego Wygenerowany wyjątek jest istotny i wynika ze sposobu działania właściwości innerhtml. Podczas przypisywania zawartości HTML do innerhtml używa się danych tekstowych. Podczas pobierania wartości właściwości innerhtml elementy potomne zamieniane są na tekst. Przypisywanie wartości do właściwości innerhtml oznacza zamianę elementów potomnych na podany tekst HTML. Następnie HTML podany w postaci tekstu jest konwertowany na zestaw elementów HTML, które są pokazywane użytkownikowi. Funkcje GoodReplace i BadReplace są przykładem przeprowadzania operacji na właściwości innerhtml. Jednakże zmiana wartości właściwości innerhtml w przypadku, kiedy nie powinna ona być zmieniana, albo zmiana powodująca naruszenie struktury HTML spowoduje powstanie nieprawidłowości. Na przykład w powyższym przypadku nie mogłeś stworzyć tabeli bez wierszy czy komórek. Innym sposobem operowania na obiektowym modelu dokumentu HTML jest używanie pojedynczych elementów HTML. Można tworzyć ich instancje, przeprowadzać jakieś operacje i usuwać. Dzięki wykorzystaniu obiektowego modelu dokumentu znacznie trudniej jest spowodować nieprawidłowości, ponieważ pozwala on na używanie tylko
21 78 Ajax. Wzorce i najlepsze rozwiązania niektórych metod i właściwości. Podczas korzystania z obiektowego modelu dokumentu HTML nie można w prosty sposób usunąć wszystkich wierszy tabeli i zamienić ich na tekst. Obiektowy model tabeli nie ma metod umożliwiających stworzenie konstrukcji przedstawionej na rysunku 3.8. Należy pamiętać, że we wzorcu Fragmentacja Zawartości wymieniane są całe fragmenty HTML. Dlatego mimo tego, że właściwość innerhtml jest elastyczna i daje duże możliwości, wymiana nieodpowiedniego fragmentu w nieodpowiednim czasie może dać w efekcie źle sformatowany HTML. Powinieneś pamiętać, że podczas odwoływania się do elementów HTML w kontekście omawianego wzorca należy odwoływać się tylko do tych elementów strony szkieletowej, w których mają być umieszczane poszczególne fragmenty zawartości. Podstawową zasadą powinno być to, że skrypt w szkielecie HTML nie odwołuje się bezpośrednio do elementów w dynamicznie umieszczanych fragmentach, ponieważ tworzy to dynamiczne zależności, które mogą, ale nie muszą działać. Jeśli takie zależności są niezbędne, umieść je w metodach zawartych w umieszczanym fragmencie kodu i następnie odwołuj się tylko do tych metod. JavaScript umożliwia przypisanie określonych funkcji do elementów HTML. Identyfikowanie elementów Jak już wspomniałem, podczas wyszukiwania elementów z wykorzystaniem typu znacznika nie jest możliwe określenie identyfikatora, a podczas wyszukiwania z wykorzystaniem identyfikatora nie jest możliwe określenie typu znacznika. Bez względu na to, w jaki sposób zostaną znalezione elementy, będą one stanowiły początkowy punkt, w którym zostaną przeprowadzane operacje. Na podstawie tego punktu skrypt może poruszać się po elementach będących jego rodzicami albo elementami potomnymi przy wykorzystaniu standardowych właściwości i metod. Owe standardowe właściwości i metody są dostępne niemalże dla wszystkich elementów HTML. Dlatego też programiści skryptów powinni wykorzystywać je podczas poruszania się po hierarchii elementów, zmieniania wyglądu czy przy próbie ich identyfikacji. W tabeli 3.1 przedstawiono właściwości, które mogą być wykorzystane podczas pisania skryptów. Fragmenty w postaci danych binarnych, URL i obrazków Tworzenie fragmentów zawartości z danych binarnych czy obrazków w ich pierwotnej postaci przy użyciu obiektu XMLHttpRequest jest raczej skomplikowane, ponieważ ten rodzaj danych jest uszkadzany podczas odczytu. Właściwości responsetext i responsexml obiektu XMLHttpRequest oczekują odpowiednio tekstu albo XML-a. Użycie danych w innym formacie nie jest możliwe. Oczywiście jest wyjątek: dane binarne zakodowane w formacie Base64 są traktowane jako tekst i można je pobrać, wykorzystując obiekt XMLHttpRequest. Innym rozwiązaniem może być używanie odnośników do danych binarnych zamiast samych danych. W przypadku znacznika img oznacza to, że do atrybutu src należy przypisać URL wskazujący, gdzie znajduje się obrazek.
22 Rozdział 3. Wzorzec Fragmentacja Zawartości 79 Tabela 3.1. Właściwości elementów HTML przydatne podczas pisania skryptów Identyfikator właściwości attributes[] childnodes[] classname dir disabled firstchild, lastchild id nextsibling, previoussibling nodename nodetype nodevalue parentelement style tabindex tagname Opis Zawiera przeznaczoną tylko do odczytu kolekcję atrybutów związanych z elementem HTML. Pojedynczy atrybut może być pobrany przy użyciu metody getattribute. Do przypisania lub napisania atrybutu używana jest metoda setattribute, a do jego usunięcia removeattribute. Do instancji NodeList odwołuje się najczęściej jak do tablicy, przy czym jest ona tylko do odczytu. Żeby dodać element potomny do bieżącego elementu, należy użyć appendchild. Do usuwania elementu potomnego używana jest metoda removechild, a do zamiany replacechild. Służy do przypisywania do elementu HTML klasy z arkusza stylów. Typ class jest bardzo ważny w dynamicznym HTML-u, ponieważ można dzięki niemu dynamicznie zmieniać wygląd elementów HTML. Wskazuje na kierunek przepływu tekstu: z lewej do prawej (ltr) albo z prawej do lewej (rtl). Włącza (wartość false) bądź wyłącza (wartość true) element. Jest przydatny, jeśli skrypt nie chce, żeby użytkownik nacisnął jakiś przycisk albo inny element interfejsu, zanim nie zostanie zakończona jakaś operacja. Pobiera pierwszy albo ostatni węzeł potomny. Identyfikator używany do odnalezienia danego elementu. Właściwość ta jest używana na przykład podczas wywoływania metody getelementbyid. Pobiera następny albo poprzedni sąsiedni element. W połączeniu z firstchild i lastchild może być używany do przechodzenia przez zbiór elementów. To podejście może być używane do przechodzenia listy, w której poszczególne elementy wskazują, jaki powinien być następny element, na przykład podczas implementowania wzorca Dekorator albo podobnej struktury. Zawiera nazwę elementu, co w przypadku HTML-a oznacza nazwę znacznika (na przykład td, table itp.). Zawiera typ elementu, ale jest wykorzystywany głównie podczas przetwarzania XML-a. W odniesieniu do HTML-a ta właściwość jest mało przydatna. Zawiera wartość danych w węźle. Ta właściwość także jest bardziej przydatna podczas przetwarzania dokumentów XML. W odniesieniu do HTML-a nie można używać tej właściwości jako zamiennika dla innerhtml. Pobiera element będący rodzicem bieżącego elementu. Może być używana na przykład do poruszania się po tabeli zawierającej wiersze i komórki. Zawiera bieżące właściwości stylu elementu. Jest instancją typu CSSStyleDeclaration. Określa kolejność elementu podczas wybierania klawiszem Tab w odniesieniu do całego dokumentu HTML. Zawiera nazwę znacznika bieżącego elementu. Ta właściwość może być użyta podczas próby określenia typu elementu po pobraniu go metodą getelementbyid.
23 80 Ajax. Wzorce i najlepsze rozwiązania Obrazki pobierane są pośrednio. Żeby zrozumieć sposób, w jaki się to odbywa, spójrzmy na aplikację, która wykorzystuje XMLHttpRequest do pobrania dokumentu zawierającego jedną linijkę. Linijka ta zawiera URL do pliku z obrazkiem. Poniżej znajduje się implementacja przykładowego programu: <html> <head> <title>fragment dokumentu HTML z obrazkiem</title> <script language="javascript" src="/lib/factory.js"></script> <script language="javascript" src="/lib/asynchronous.js"></script> <script language="javascript" type="text/javascript"> var asynchronous = new Asynchronous(); asynchronous.complete = function(status, statustext, responsetext, responsexml) { document.getelementbyid("image").src = responsetext; } </script> </head> <body> <button onclick="asynchronous.call('/chap03/chunkimage01.html')">pobierz obrazek</button> <br> <img id="image" /> </body> </html> Do pobrania obrazka używany jest znacznik img. W większości obrazków znacznik img jest określony przy użyciu atrybutu src będącego odnośnikiem do miejsca, w którym się one znajdują. W tym przykładzie nie ma atrybutu src, zamiast tego jest id. Po wczytaniu i pokazaniu strony HTML wyświetlany jest uszkodzony obrazek, ponieważ ze znacznikiem img nie jest związany żaden plik. Żeby znacznik img wyświetlał się prawidłowo, należy nacisnąć przycisk Pobierz obrazek, który wykonuje żądanie pobierające jednolinijkowy plik zawierający URL obrazka. Po pobraniu jednolinijkowego pliku przez XMLHttpRequest wywoływana jest implementacja funkcji właściwości complete. Przypisuje ona do atrybutu (właściwości) src URL zdalnego obrazka. Następnie przeglądarka aktualizuje dane, pobiera obrazek i wyświetla go. Jednolinijkowy plik znajduje się pod adresem URL /chap03/chunkimage01.html i ma następującą zawartość: /static/patches01.jpg Gdy omawiana strona HTML, w której nie został określony atrybut src, zostanie pobrana, będzie ona wyświetlona podobnie jak na rysunku Na rysunku 3.10, poniżej przycisku Pobierz obrazek widać mały prostokąt wskazujący nieprawidłowy znacznik img, który nie spowodował wczytania żadnego obrazka. Po naciśnięciu przycisku Pobierz obrazek pobierane jest łącze do obrazka. Następnie jest ono przypisywane do znacznika img, co powoduje wczytanie obrazka. Na rysunku 3.11 widać przetworzoną stronę.
24 Rozdział 3. Wzorzec Fragmentacja Zawartości 81 Rysunek Początkowa strona HTML bez obrazka Rysunek Strona HTML po wczytaniu obrazka Pobieranie i przypisywanie łącza, które jest następnie przetwarzane przez przeglądarkę, wydaje się dziwne. To pośrednie podejście nie ma przedstawiać, jak skomplikowana może być aplikacja internetowa, ale jest potrzebne, ponieważ nie ma możliwości bezpośredniego pobierania danych binarnych. Jednak nie jest to aż tak wielki problem, ponieważ przeglądarka wczytuje obrazek, do którego się odnosimy, i umieszcza go w swojej pamięci podręcznej. Jeśli będziemy się do niego ponownie odnosić, zostanie on pobrany właśnie z pamięci podręcznej przeglądarki. Oczywiście dzieje się tak tylko w przypadku, kiedy serwer HTTP implementuje pamięć podręczną. Jest jeden minus tego rozwiązania. Jeśli wykonujemy żądanie pobierające URL, który jest odnośnikiem do obrazka, wymagane są dwa żądania: jedno do pobrania adresu URL obrazka i drugie do pobrania jego samego. Jeśli oba żądania używają protokołu HTTP 1.1, a tak będzie w większości przypadków, zostaną one wykonane podczas jednego połączenia.
25 82 Ajax. Wzorce i najlepsze rozwiązania Kolejną odmianą przedstawionej strategii jest pobranie całego kodu HTML tworzącego obrazek, a nie samego adresu URL. Ta strategia nie zachowuje połączenia żądania, ale jest samodzielnym rozwiązaniem, które nie wymaga dodatkowego skryptu. Poniższy fragment przedstawia, w jaki sposób pobierany jest cały znacznik img. <img src="/static/patches01.jpg" /> Zarówno podczas umieszczania znacznika img, jak i odpowiedniego atrybutu src przeglądarka dynamicznie pobierze obrazek, jak to pokazano w poprzednim przykładzie. Zaletą umieszczania kodu HTML jest to, że aplikacja po stronie serwera może umieścić wiele obrazków albo inny rodzaj HTML. Ponadto podczas umieszczania całego znacznika img nie występuje pierwszy etap, w którym wyświetlany jest uszkodzony obrazek. Jednakże oba podejścia są tak samo dobre, a ich wybór zależy od rodzaju aplikacji. Kiedy na stronie umieszczany jest HTML, może ona migotać, gdy będzie zmieniany jej rozmiar. Kiedy przypisujesz wartość do właściwości src, nie występuje migotanie, ale trzeba określić pusty obrazek albo ukryć element obrazka. Fragmentacja JavaScriptu Kolejnym rodzajem fragmentacji jest wysyłanie JavaScriptu. Może ono być bardzo efektywne, ponieważ nie musisz przetwarzać danych, a tylko wykonać JavaScript. Z punktu widzenia skryptu po stronie klienta jest to bardzo łatwe do zaimplementowania. Nie powinieneś jednak zakładać, że pobranie JavaScriptu będzie szybsze niż parsowanie i przetworzenie danych XML, a następnie skonwertowanie ich przed wykonaniem. Zaletą podejścia wykorzystującego JavaScript jest prostota i efektywność. Po prostu łatwiej jest wykonać fragment JavaScriptu i odnosić się do udostępnionych właściwości i funkcji. Wykonywanie JavaScriptu Rozpatrzmy poniższy kod HTML, który wykonuje określony JavaScript: <html> <head> <title>fragment zawartości HTML z JavaScriptem</title> <script language="javascript" src="/lib/factory.js"></script> <script language="javascript" src="/lib/asynchronous.js"></script> <script language="javascript" type="text/javascript"> var asynchronous = new Asynchronous(); asynchronous.complete = function(status, statustext, responsetext, responsexml) { eval(responsetext); } </script> </head> <body> <button onclick="asynchronous.call('/chap03/chunkjs01.html')">pobierz skrypt</button> <table>
26 Rozdział 3. Wzorzec Fragmentacja Zawartości 83 <tr><td id="insertplace">brak zawartości</td></tr> </table> </body> </html> Po naciśnięciu przycisku Pobierz skrypt wykonywane jest żądanie XMLHttpRequest pobierające dokument /chap03/chunkjs01.html. Dokument zawiera fragment Java- Scriptu, który jest wykonywany za pomocą funkcji eval. Pobierany jest następujący fragment kodu: window.alert("hurra, wywołane dynamicznie"); Przykładowy fragment nie jest zbytnio rozbudowany i wyświetla okienko dialogowe. Tym, co niepokoi wielu ludzi podczas wykonywania takiego kodu JavaScript, jest to, że jest on pobrany z zewnątrz. Administrator i użytkownik może zastanawiać się nad konsekwencjami związanymi z bezpieczeństwem, ponieważ pobrany JavaScript może zawierać wirusy. Jednakże tak właściwie nie jest to możliwe, gdyż JavaScript jest wykonywany w piaskownicy i dotyczy go polityka tego samego źródła. Oczywiście jeśli programista ominie politykę tego samego źródła, problemy związane z bezpieczeństwem nabiorą znaczenia. Najprostszą implementacją pobierania fragmentu kodu do wykonania jest dynamiczne tworzenie po stronie serwera fragmentów JavaScriptu, które wykonują jakieś metody. Fragmenty JavaScriptu powodują, że przeglądarka wykonuje jakieś polecenia. Na przykład fragment JavaScriptu pobierany w poprzednim przykładzie mógłby być wykorzystywany do przypisania jakichś danych do znacznika span albo td, co przedstawiono poniżej: document.getelementbyid("mycell").innerhtml = "witaj"; Wygenerowany skrypt jest zakodowany na sztywno, ponieważ oczekuje, że na docelowej stronie HTML będą znajdowały się określone elementy. Generowanie JavaScriptu operującego na obiektowym modelu dokumentu Wcześniej widziałeś rozwiązanie, w którym obrazek początkowo był uszkodzony, a następnie wyświetlony po pobraniu prawidłowego łącza. Obrazek można także pobrać poprzez zmianę obiektowego modelu dynamicznego HTML-a. Model obiektowy zmieniasz poprzez wykorzystanie fragmentu JavaScriptu do wstawienia znacznika img. Poniżej znajduje się fragment JavaScriptu tworzący znacznik img i wstawiający go do dokumentu HTML. var img = new Image(); img.src = "/static/patches01.jpg"; document.getelementbyid("insertplace").appendchild(img); W tym przykładzie zmienna img jest instancją obiektu Image, który odnosi się do znacznika HTML img. Do właściwości src przypisywany jest adres URL obrazka. Ostatnia linia tego fragmentu kodu używa metody appendchild, żeby dodać instancję obiektu Image do dokumentu HTML. Jeśli zmienna img nie zostanie powiązana z dokumentem
Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk
Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery Łukasz Bartczuk Moduł 6 JavaScript w przeglądarce Agenda Skrypty na stronie internetowej Model DOM AJAX Skrypty na stronie
DOM (Document Object Model)
DOM (Document Object Model) Czym jest DOM? Platforma, która pozwala skryptom na dynamiczny dostęp do zawartości strony i jej aktualizację. Elementy można dodawać, zmieniać lub usuwać. Specyfikacje Poziomy
Spis wzorców. Działania użytkownika Strona 147 Obsługa większości Działań użytkownika za pomocą kodu JavaScript przy użyciu metod obsługi zdarzeń.
Spis wzorców Aplikacja Ajax Strona 73 Tworzenie Aplikacji Ajax złożonych aplikacji, które można uruchomić w dowolnej współczesnej przeglądarce internetowej. Bezpośrednie logowanie Strona 509 Uwierzytelnianie
Rys.2.1. Drzewo modelu DOM [1]
1. CEL ĆWICZENIA Celem ćwiczenia jest przedstawienie możliwości wykorzystania języka JavaScript do tworzenia interaktywnych aplikacji działających po stronie klienta. 2. MATERIAŁ NAUCZANIA 2.1. DOM model
2 Podstawy tworzenia stron internetowych
2 Podstawy tworzenia stron internetowych 2.1. HTML5 i struktura dokumentu Podstawą działania wszystkich stron internetowych jest język HTML (Hypertext Markup Language) hipertekstowy język znaczników. Dokument
Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych
Czym jest AJAX AJAX wprowadzenie Beata Pańczyk na podstawie: 1. Lis Marcin, Ajax, Helion, 2007 2. Hadlock Kris, Ajax dla twórców aplikacji internetowych, Helion, 2007 AJAX (Asynchronous JavaScript and
Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie z Seminarium Dyplomowego Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
World Wide Web? rkijanka
World Wide Web? rkijanka World Wide Web? globalny, interaktywny, dynamiczny, wieloplatformowy, rozproszony, graficzny, hipertekstowy - system informacyjny, działający na bazie Internetu. 1.Sieć WWW jest
Laboratorium 7 Blog: dodawanie i edycja wpisów
Laboratorium 7 Blog: dodawanie i edycja wpisów Dodawanie nowych wpisów Tworzenie formularza Za obsługę formularzy odpowiada klasa Zend_Form. Dla każdego formularza w projekcie tworzymy klasę dziedziczącą
MS Word 2010. Długi dokument. Praca z długim dokumentem. Kinga Sorkowska 2011-12-30
MS Word 2010 Długi dokument Praca z długim dokumentem Kinga Sorkowska 2011-12-30 Dodawanie strony tytułowej 1 W programie Microsoft Word udostępniono wygodną galerię wstępnie zdefiniowanych stron tytułowych.
Kurs obsługi systemu CMS. Prawie wszystkie treści wyświetlające się na stronie są zlokalizowane w dziale artykuły.
Kurs obsługi systemu CMS Zaczynając przygodę z systemem zarządzania treścią Joomla 2.5 należy przedstawić główny panel administratora. Całość zaprojektowana jest w kombinacji dwóch systemów nawigacyjnych.
1.Formatowanie tekstu z użyciem stylów
1.Formatowanie tekstu z użyciem stylów Co to jest styl? Styl jest ciągiem znaków formatujących, które mogą być stosowane do tekstu w dokumencie w celu szybkiej zmiany jego wyglądu. Stosując styl, stosuje
Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV
Piotr Jarosik, Kamil Jaworski, Dominik Olędzki, Anna Stępień Dokumentacja wstępna TIN Rozproszone repozytorium oparte o WebDAV 1. Wstęp Celem projektu jest zaimplementowanie rozproszonego repozytorium
e r T i H M r e n L T n
s e r T t w o i H M r e o T n w z n L Podstawy 1. Nawigacja na stronie jest niezwykle istotna, powinna być możliwie jak najprostsza. Pamiętajmy, że im mniej kroków do celu tym lepiej. 2. Projekt graficzny
Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych
rk Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych pojęć, prawdopodobnie zastanawiasz się, kiedy zaczniesz
Zdarzenia Zdarzenia onload i onunload
Zdarzenia Zdarzenia onload i onunload Ćwiczenie 1. Rysunek 1. Okno powitalne wykorzystujące zdarzenie onload Na stronie mogą zachodzić różne zdarzenia, np. użytkownik kliknie myszą lub zacznie wprowadzać
Funkcje i instrukcje języka JavaScript
Funkcje i instrukcje języka JavaScript 1. Cele lekcji a) Wiadomości Uczeń : zna operatory i typy danych języka JavaScript, zna konstrukcję definicji funkcji, zna pętlę If i For, Do i While oraz podaje
PHP: bazy danych, SQL, AJAX i JSON
1 PHP: bazy danych, SQL, AJAX i JSON SYSTEMY SIECIOWE Michał Simiński 2 Bazy danych Co to jest MySQL? Jak się połączyć z bazą danych MySQL? Podstawowe operacje na bazie danych Kilka dodatkowych operacji
TECHNOLOGIE INTERNETOWE WYKŁAD 6. JavaScript Funkcje i obiekty
1. Co to jest funkcja? Funkcja jest oddzielnym blokiem kodu, który może być wielokrotnie wykonywany w danym programie, poprzez jej wielokrotne wywoływanie. Do funkcji przekazujemy przeważnie jakieś argumenty,
Aplikacje Internetowe
Aplikacje Internetowe ITA-103 Wersja 1 Warszawa, październik 2008 Spis treści Wprowadzenie i-4 Moduł 1 Podstawy HTML 1-1 Moduł 2 Kaskadowe Arkusze Stylów CSS 2-1 Moduł 3 Podstawy JavaScript 3-1 Moduł 4
Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.
Spis treści: 1 Podstawy pracy z aplikacją... 2 1.1 Układ strony... 2 strona 1 z 7 1 Podstawy pracy z aplikacją InDesign jest następcą starzejącego się PageMakera. Pod wieloma względami jest do niego bardzo
Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: 29.06.2015 Wersja: 1.
Widżety KIWIPortal tworzenie umieszczanie na stronach internetowych opcje zaawansowane Autor: Damian Rebuś Data: 29.06.2015 Wersja: 1.3 Strona 1 z 17 1 SPIS TREŚCI 2 Metody osadzania widżetów... 3 2.1
JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.
IŚ ćw.8 JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript są zagnieżdżane w dokumentach HTML. Skrypt JavaScript
Przetwarzanie dokumentów XML i zaawansowane techniki WWW Zdarzenia w JavaScript (Zajęcia r.)
Przetwarzanie dokumentów XML i zaawansowane techniki WWW Zdarzenia w JavaScript (Zajęcia 08 25.04.2016 r.) 1) Zdarzenia w JavaScript Zdarzenia są sygnałami generowanymi w chwili wykonywania ściśle określonych
Pogadanka o czymś, co niektórzy nazywają AJAX
Pogadanka o czymś, co niektórzy nazywają AJAX Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź, 25 listopada 2005 roku Nowy świat aplikacji internetowych... System/przeglądarka
Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka
Sesje, ciasteczka, wyjątki Nie sposób wyobrazić sobie bez nich takich podstawowych zastosowań, jak logowanie użytkowników czy funkcjonowanie koszyka na zakupy. Oprócz tego dowiesz się, czym są wyjątki,
Bezpieczeństwo systemów komputerowych
Bezpieczeństwo systemów komputerowych Zagrożenia dla aplikacji internetowych Aleksy Schubert (Marcin Peczarski) Instytut Informatyki Uniwersytetu Warszawskiego 15 grudnia 2015 Lista zagadnień Wstrzykiwanie
Budowa argumentacji bezpieczeństwa z użyciem NOR-STA Instrukcja krok po kroku
Budowa argumentacji bezpieczeństwa z użyciem NOR-STA Instrukcja krok po kroku NOR-STA jest narzędziem wspierającym budowę, ocenę oraz zarządzanie strukturą argumentacji wiarygodności (assurance case),
Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
Tworzenie pliku źródłowego w aplikacji POLTAX2B.
Tworzenie pliku źródłowego w aplikacji POLTAX2B. Po utworzeniu spis przekazów pocztowych klikamy na ikonę na dole okna, przypominającą teczkę. Następnie w oknie Export wybieramy format dokumentu o nazwie
Zajęcia 4 - Wprowadzenie do Javascript
Zajęcia 4 - Wprowadzenie do Javascript Co to jest Javascript Javascript jest językiem skryptowym pozwalającym na dołączanie dodatkowej funkcjonalności do stron WWW. Jest ona najczęściej związana z modyfikacją
CMS- kontakty (mapa)
CMS- kontakty (mapa) Rozpatrzy inny rodzaj kontaktu mapa sytuacyjna. W naszej kategorii kontaktów dodamy teraz multimedialną mapę dojazdową. W tym celu potrzebny nam będzie moduł HTML 1.0. Będziemy mogli
PHP: bloki kodu, tablice, obiekty i formularze
1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują
5.4. Tworzymy formularze
5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania
Aplikacje WWW - laboratorium
Aplikacje WWW - laboratorium Język JavaScript Celem ćwiczenia jest przygotowanie formularza na stronie WWW z wykorzystaniem języka JavaScript. Formularz ten będzie sprawdzany pod względem zawartości przed
I. Menu oparte o listę
I. Menu oparte o listę We wcześniejszych przykładach założyliśmy, że menu posiada tylko jeden poziom nawigacji. Czasem jednak jeden poziom nie wystarczy za pomocą list elementów oraz kaskadowych arkuszy
Smarty PHP. Leksykon kieszonkowy
IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK
ABC języka HTML i XHTML / Maria Sokół. wyd. 2. Gliwice, cop Spis treści
ABC języka HTML i XHTML / Maria Sokół. wyd. 2. Gliwice, cop. 2012 Spis treści Wstęp 9 1 HTML 5 i XHTML w pytaniach i odpowiedziach 13 Co to jest HTML 5? 13 Co to jest XHTML? 15 Czy strony utworzone w HTML
Podstawy technologii WWW
Podstawy technologii WWW Ćwiczenie 14 AJAX, czyli jak odświeżyć bez odświeżania, część trzecia Na dzisiejszych zajęciach będziemy kontynuować realizację serwisu do wymiany wiadomości z wykorzystaniem technologii
Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane
Extensible Markup Language (XML) Wrocław, 15.03.2019 - Java - technologie zaawansowane Wprowadzenie XML jest językiem znaczników (ang. markup language) używanym do definiowania zbioru zasad rozmieszczenia
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1
WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1 XML DOM (ang. XML Document Object Model Obiektowy Model Dokumentu XML) Inaczej drzewo DOM to hierarchiczny, obiektowy model dokumentu XML. DOM to platforma
Modele danych walidacja widoki zorientowane na model
Modele danych walidacja widoki zorientowane na model 1. Wprowadzenie Modele danych Modele danych w ASP.NET MVC to klasy znajdujące się w katalogu Models. Ich zadaniem jest mapowanie danych przesyłanych
XML extensible Markup Language. część 5
XML extensible Markup Language część 5 JavaScript Co to jest JavaScript? JavaScript był zaprojektowany w celu dodania interaktywności do stron HTML JavaScript jest językiem skryptowym JavaScript jest zwykle
Ćwiczenie: JavaScript Cookies (3x45 minut)
Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.
Komunikacja i wymiana danych
Budowa i oprogramowanie komputerowych systemów sterowania Wykład 10 Komunikacja i wymiana danych Metody wymiany danych Lokalne Pliki txt, csv, xls, xml Biblioteki LIB / DLL DDE, FastDDE OLE, COM, ActiveX
Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]
JAVA wprowadzenie do programowania (3/3) [1] Czym jest aplikacja Java Web Start? Aplikacje JAWS są formą pośrednią pomiędzy apletami a aplikacjami Javy. Nie wymagają do pracy przeglądarki WWW, jednak mogą
Programowanie Komponentowe WebAPI
Programowanie Komponentowe WebAPI dr inż. Ireneusz Szcześniak jesień 2016 roku WebAPI - interfejs webowy WebAPI to interfejs aplikacji (usługi, komponentu, serwisu) dostępnej najczęściej przez Internet,
Aplikacje WWW - laboratorium
Aplikacje WWW - laboratorium Język JavaScript Celem ćwiczenia jest przygotowanie formularza HTML z wykorzystaniem języka JavaScript. Formularz ten będzie sprawdzany pod względem zawartości przed wysłaniem
HTML, CSS i JavaScript / Laura Lemay, Rafe Colburn, Jennifer Kyrnin. Gliwice, cop Spis treści
HTML, CSS i JavaScript / Laura Lemay, Rafe Colburn, Jennifer Kyrnin. Gliwice, cop. 2017 Spis treści O autorach 11 Wprowadzenie 13 CZĘŚĆ I ROZPOCZĘCIE PRACY Lekcja 1. Co oznacza publikowanie treści w sieci
Platforma e-learningowa
Dotyczy projektu nr WND-RPPD.04.01.00-20-002/11 pn. Wdrażanie elektronicznych usług dla ludności województwa podlaskiego część II, administracja samorządowa realizowanego w ramach Decyzji nr UDA- RPPD.04.01.00-20-002/11-00
Ajax. Æwiczenia IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA. SPIS TREœCI KATALOG ONLINE
IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE Ajax. Æwiczenia Autor: Marcin Lis ISBN: 83-246-0686-6 Format: A5, stron: 168 Przyk³ady na ftp: 32 kb ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK
Podstawy programowania w języku JavaScript
Podstawy programowania w języku JavaScript Część piąta AJAX Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych
Jak ustawić cele kampanii?
Jak ustawić cele kampanii? Czym są cele? Jest to funkcjonalność pozwalająca w łatwy sposób śledzić konwersje wygenerowane na Twojej stronie www poprzez wiadomości email wysłane z systemu GetResponse. Mierzenie
1. Przypisy, indeks i spisy.
1. Przypisy, indeks i spisy. (Wstaw Odwołanie Przypis dolny - ) (Wstaw Odwołanie Indeks i spisy - ) Przypisy dolne i końcowe w drukowanych dokumentach umożliwiają umieszczanie w dokumencie objaśnień, komentarzy
Pętle. Dodał Administrator niedziela, 14 marzec :27
Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać
Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński rperlinski@icis.pcz.pl
ngular, cz. II 1/24 Angular, cz. II Tworzenie serwisów Web 2.0 dr inż. Robert Perliński rperlinski@icis.pcz.pl Politechnika Częstochowska Instytut Informatyki Teoretycznej i Stosowanej 10 kwietnia 2015
Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania
1) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi elementami obiektowymi systemu Windows wykorzystując Visual Studio 2008 takimi jak: przyciski, pola tekstowe, okna pobierania danych
Wykład III. dr Artur Bartoszewski www.bartoszewski.pr.radom.pl. Wydział Nauczycielski, Kierunek Pedagogika Wprowadzenie do baz danych
Wydział Nauczycielski, Kierunek Pedagogika Wprowadzenie do baz danych dr Artur Bartoszewski www.bartoszewski.pr.radom.pl Wykład III W prezentacji wykorzystano fragmenty i przykłady z książki: Joe Habraken;
OfficeObjects e-forms
OfficeObjects e-forms Rodan Development Sp. z o.o. 02-820 Warszawa, ul. Wyczółki 89, tel.: (+48-22) 643 92 08, fax: (+48-22) 643 92 10, http://www.rodan.pl Spis treści Wstęp... 3 Łatwość tworzenia i publikacji
SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,
SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania Wykład 3 1 SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania Przykład Bingo 2 Treść przykładu Jak wygląda karta do
Ajax. 1. Wprowadzenie. 2. Aplikacja serwerowa
Ajax 1. Wprowadzenie Do tej pory każda akcja na Waszej stronie kończyła się nowym requestem do serwera i przeładowaniem całej strony w przeglądarce. W tej instrukcji dodamy elementy asynchroniczne na stronie,
Tutorial. HTML Rozdział: Ramki
Autor: Mateusz Wojtyna Opis ogólny Tutorial HTML Rozdział: Ramki Ramki są bardzo pomocnym narzędziem przy tworzeniu strony internetowej jeżeli na przykład chcemy stworzyć sobie menu wszystkich podstron
Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.
Zadanie: Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Na kolejnych zajęciach projekt będzie rozwijana i uzupełniana o kolejne elementy omawiane
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
Przewodnik Szybki start
Przewodnik Szybki start Program Microsoft Publisher 2013 wygląda inaczej niż wcześniejsze wersje, dlatego przygotowaliśmy ten przewodnik, aby skrócić czas nauki jego obsługi. Pasek narzędzi Szybki dostęp
Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione
Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf Materiały poprawione Rozwiązanie zadania w NetBeans IDE 7.4: Jarosław Ksybek, Adam Miazio Celem ćwiczenia jest przygotowanie prostej aplikacji
Podstawy technologii WWW
Podstawy technologii WWW Ćwiczenie 8 PHP, czyli poczatki nowej, dynamicznej znajomosci Na dzisiejszych zajęciach rozpoczniemy programowanie po stronie serwera w języku PHP. Po otrzymaniu żądania serwer
Front-end: solidne podstawy. Wszystko, co warto wiedzieć o HTML, CSS, JavaScript i Bootstrap.
Kod szkolenia: Tytuł szkolenia: FRONT-END Front-end: solidne podstawy. Wszystko, co warto wiedzieć o HTML, CSS, JavaScript i Bootstrap. Dni: 5 Opis: Adresaci szkolenia Kurs przeznaczony jest zarówno dla
SOGA web co powinieneś wiedzieć
SOGA web co powinieneś wiedzieć 1. Zakup Opłata za użytkowanie serwisu SOGA web wynosi 990zł netto za pierwszy rok oraz 99zł za każdy kolejny. Do uruchomienia serwisu konieczne jest posiadanie licencji
Aplikacja Novell Filr 2.0 Web Szybki start
Aplikacja Novell Filr 2.0 Web Szybki start Luty 2016 r. Szybki start Niniejszy dokument pomaga zapoznać się z systemem Novell Filr oraz ułatwia zrozumienie najistotniejszych pojęć i zadań. Informacje o
XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery
http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod
A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów
A Zasady współpracy Ocena rozwiązań 3.0 25 40 punktów 3.5 41 65 punktów 4.0 66 80 punktów 4.5 81 100 punktów 5.0 101 130 punktów Warunki zaliczenia przedmiotu Student uzyska ocenę zaliczającą (3.0) o ile
Backend Administratora
Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona
Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe
Zestawienie wydatków rok 2015 1 Wstaw numerację stron. Aby to zrobić przejdź na zakładkę Wstawianie i w grupie Nagłówek i stopka wybierz Numer strony. Następnie określ pozycję numeru na stronie (na przykład
Moduł 2. Wykorzystanie programu Excel do zadań analitycznych
Moduł 2. Wykorzystanie programu Excel do zadań analitycznych Rozdział 5. Adresacja względna, bezwzględna, mieszana i wielowymiarowa w analizie danych. Wykorzystanie nazwanych obszarów komórek do adresacji
XML i nowoczesne technologie zarządzania treścią 2007/08
Zadanie 3 Poprawkowe XML i nowoczesne technologie zarządzania treścią 2007/08 Wprowadzenie Należy napisać program w Javie, który czytając w trybie SAX plik z listą operacji, wykonuje zadane operacje na
Przewodnik użytkownika (instrukcja) AutoMagicTest
Przewodnik użytkownika (instrukcja) AutoMagicTest 0.1.21.137 1. Wprowadzenie Aplikacja AutoMagicTest to aplikacja wspierająca testerów w testowaniu i kontrolowaniu jakości stron poprzez ich analizę. Aplikacja
etrader Pekao Podręcznik użytkownika Strumieniowanie Excel
etrader Pekao Podręcznik użytkownika Strumieniowanie Excel Spis treści 1. Opis okna... 3 2. Otwieranie okna... 3 3. Zawartość okna... 4 3.1. Definiowanie listy instrumentów... 4 3.2. Modyfikacja lub usunięcie
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
XML extensible Markup Language. część 5
XML extensible Markup Language część 5 XML ważne zastosowanie Jak często pracujemy z plikami XML? Wróćmy jeszcze do wykładu poprzedniego. A dokładnie do pliku zawierającego ten wykład. xml_2017_wyklad_4.pptx
Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści
Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop. 2017 Spis treści O autorach 11 Podziękowania 12 Wprowadzenie 13 CZĘŚĆ I ZACZNIJ PROGRAMOWAĆ JUŻ DZIŚ Godzina 1. Praktyczne
wersja 1.0 ośrodek komputerowy uj cm ul. mikołaja kopernika 7e, Kraków tel
S Y S T E M B A D A Ń A N K I E T O W Y C H wersja 1.0 uj cm, 31-034 Kraków tel. 12 422 99 63 Opis konfiguracji Tworzenie ankiety rozpoczynamy ikoną znajdującą się w prawym górnym rogu ekranu. Ilustracja
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych
Zmiana logo. Dziękujemy za wybór naszych rozwiązań. apjoo od Apláuz. Wspólnie przebrniemy przez proces konfiguracji strony www i wstawiania treści.
Użytkownicy i hasła Dostęp do zaplecza umożliwia rozbudowany system zarządzania użytkownikami. 1. Konta użytkowników tworzy się wybierając z menu Użytkownicy > Menedżer użytkowników na stronie głownej
Praca w sieci z serwerem
11 Praca w sieci z serwerem Systemy Windows zostały zaprojektowane do pracy zarówno w sieci równoprawnej, jak i w sieci z serwerem. Sieć klient-serwer oznacza podłączenie pojedynczego użytkownika z pojedynczej
Sesje i logowanie. 1. Wprowadzenie
Sesje i logowanie 1. Wprowadzenie Żądania od nawet tego samego użytkownika na serwerze nie są domyślnie w żaden sposób łączone ze sobą. Każde jest w pewnym sensie nowe i serwer nie jest w stanie stwierdzić,
OpenLaszlo. OpenLaszlo
OpenLaszlo Spis Treści 1 OpenLaszlo Co to jest? Historia Idea Architektura Jako Flash lub DHTML Jako servlet lub SOLO Jak to działa? Język LZX Struktura programu Skrypty Obiekty i klasy Atrybuty i metody
Korzystanie z poczty e-mail i Internetu
Korzystanie z poczty e-mail i Internetu Jesteś nowym użytkownikiem systemu Windows 7? Wiele elementów odpowiada funkcjom znanym z poprzednich wersji systemu Windows, możesz jednak potrzebować pomocy, aby
Część II Wyświetlanie obrazów
Tło fragmentu ABA-X Display jest wyposażony w mechanizm automatycznego tworzenia tła fragmentu. Najprościej można to wykonać za pomocą skryptu tlo.sh: Składnia: tlo.sh numer oznacza numer
Stworzenie programu KSIĄŻKA ADRESOWA posiadającego funkcjonalności przechowywania danych o osobach dodanych przez użytkownika.
XXX XXX PROGRAMOWANIE W JAVA - PROJEKT KSIĄŻKA ADRESOWA Stworzenie programu KSIĄŻKA ADRESOWA posiadającego funkcjonalności przechowywania danych o osobach dodanych przez użytkownika. 1. Przygotowywanie
Tworzenie prezentacji w MS PowerPoint
Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje
Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie:
Repozytorium służy do przechowywania plików powstających przy pracy nad projektami we w miarę usystematyzowany sposób. Sam mechanizm repozytorium jest zbliżony do działania systemu plików, czyli składa
Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2
Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2 Statyczne strony HTML Wczytanie statycznej strony HTML sprowadza się do odebrania żądania przez serwer, odnalezienia właściwego pliku
Spis treści CZĘŚĆ I JĘZYK SIECI 17. Wstęp 13. Rozdział 1 Wprowadzenie do HTML5 19. Rozdział 2 Znajomość znaczników HTML5 37
Spis treści Wstęp 13 CZĘŚĆ I JĘZYK SIECI 17 Rozdział 1 Wprowadzenie do HTML5 19 Tworzenie przy pomocy znaczników: przegląd 20.Wprowadzanie nowych elementów HTML5 21 Korzystanie z kontynuowanych znaczników