Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska.

1 Projektowanie Aplikacji Internetowych Artur Niewiarowsk...
Author: Izydor Szatan
0 downloads 2 Views

1 Projektowanie Aplikacji Internetowych Artur Niewiarowski Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska

2 PHP, cz. 3

3 Klasy

4 Klasa jest to … Kilka słów wstępu …

5 Tworzenie obiektów

6 class student { public $imie; public $nazwisko; function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } $student = new student; $student->imie = "Jan"; $student->nazwisko = "Kowalski"; echo $student->odczytaj_dane(); Tworzenie klasy

7 class student { private $imie; private $nazwisko; function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } $student = new student; $student->imie = "Jan"; $student->nazwisko = "Kowalski"; echo $student->odczytaj_dane(); Zasięg zmiennych i metod

8 public – zmienna lub metoda jest widoczna z poziomu całego skryptu PHP protected – zmienna lub metoda jest widoczna tylko z obiektu w którym się znajduje bądź z jego obiektu podrzędnego i tylko z tego poziomu może być dostępna lub widoczna private – zmienna lub metoda jest widoczna tylko z obiektu w którym się znajduje Zasięg zmiennych i metod

9 public – zmienna lub metoda jest widoczna z poziomu całego skryptu PHP protected – zmienna lub metoda jest widoczna tylko z obiektu w którym się znajduje bądź z jego obiektu podrzędnego i tylko z tego poziomu może być dostępna lub widoczna private – zmienna lub metoda jest widoczna tylko z obiektu w którym się znajduje Zasięg zmiennych i metod

10 class klasa_pierwsza { public $public = "dostęp public"; protected $protected = "dostęp protected"; private $private = "dostęp private"; function pokaz_zmienne() { echo $this->public."\n"; echo $this->protected."\n"; echo $this->private."\n"; } $obiekt_1 = new klasa_pierwsza; $obiekt_1->pokaz_zmienne(); //wyświetlone zostaną wszystkie zmienne echo $obiekt_1->public; //ok echo $obiekt_1->protected;//błąd!! echo $obiekt_1->private; //błąd!! Zasięg zmiennych i metod

11 class klasa_druga extends klasa_pierwsza {} $obiekt_2 = new klasa_druga; $obiekt_2->pokaz_zmienne(); // pokazane zostaną: $public, $protected i $private echo $obiekt_2->public; //ok echo $obiekt_2->private; //zmienna niezdefiniowana echo $obiekt_2->protected; //błąd!! Zasięg zmiennych i metod

12 class student { private $imie; private $nazwisko; function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } function ustaw_dane($imie="", $nazwisko=""){ $this->imie = $imie; $this->nazwisko = $nazwisko; } $student = new student; $student->ustaw_dane("Anna", "Kowalska"); echo $student->odczytaj_dane(); Konstruktor [1]

13 Konstruktor i destruktor [2]

14 tu jest kod do wykonania... Konstruktor i destruktor [3]

15 Klasy potomne [2] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_16.jpg", "name": "class student extends czlowiek { private $imie; private $nazwisko; function __construct($imie= , $nazwisko= ) { $this->imie = $imie; $this->nazwisko = $nazwisko; } function odczytaj_dane(){return $this->imie.", "description": ", . $this- >nazwisko;} function ustaw_dane($imie= , $nazwisko= ) {$this->imie = $imie;$this->nazwisko = $nazwisko;} function odczytaj_wszystko() {return $this->odczytaj_wiw();} } > ustaw_wzrost_i_wage(180,90); echo $student->odczytaj_wszystko(); > Klasy potomne [2].", "width": "800" } 17 Referencje i klonowanie = clone { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_17.jpg", "name": "Referencje i klonowanie = clone", "description": "Referencje i klonowanie = clone", "width": "800" } 18 Referencje i klonowanie { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_18.jpg", "name": "< php class student { private $imie; private $nazwisko; function __construct($imie= , $nazwisko= ) { $this->imie = $imie; $this->nazwisko = $nazwisko; } function odczytaj_dane(){ return $this->imie.", "description": ", . $this->nazwisko; } function ustaw_dane($imie= , $nazwisko= ){ $this->imie = $imie; $this->nazwisko = $nazwisko; } > Referencje i klonowanie.", "width": "800" } 19 Referencje i klonowanie { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_19.jpg", "name": "odczytaj_dane(); echo \n ; $d = $s; $s->ustaw_dane( Anna , Kowalska ); echo $d->odczytaj_dane(); echo \n ; $e = clone($d); $d->ustaw_dane( Michał , Nowak ); echo $e->odczytaj_dane(); > Referencje i klonowanie.", "width": "800" } 20 Interfejs interfejs jest definicją abstrakcyjnego typu posiadającego jedynie operacje, a nie dane. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_20.jpg", "name": "Interfejs interfejs jest definicją abstrakcyjnego typu posiadającego jedynie operacje, a nie dane.", "description": "Interfejs interfejs jest definicją abstrakcyjnego typu posiadającego jedynie operacje, a nie dane.", "width": "800" } 21 interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } class student implements student_budowa { private $imie; private $nazwisko; function __construct($imie="", $nazwisko="") { $this->imie = $imie; $this->nazwisko = $nazwisko; } function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } function ustaw_dane($imie="", $nazwisko=""){ $this->imie = $imie; $this->nazwisko = $nazwisko; } Interfejsy { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_21.jpg", "name": "interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } class student implements student_budowa { private $imie; private $nazwisko; function __construct($imie= , $nazwisko= ) { $this->imie = $imie; $this->nazwisko = $nazwisko; } function odczytaj_dane(){ return $this->imie.", "description": ", . $this->nazwisko; } function ustaw_dane($imie= , $nazwisko= ){ $this->imie = $imie; $this->nazwisko = $nazwisko; } Interfejsy.", "width": "800" } 22 interface student_budowa { function odczytaj_dane(); function ustaw_daneX($imie, $nazwisko); } Interfejsy { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_22.jpg", "name": "interface student_budowa { function odczytaj_dane(); function ustaw_daneX($imie, $nazwisko); } Interfejsy", "description": "interface student_budowa { function odczytaj_dane(); function ustaw_daneX($imie, $nazwisko); } Interfejsy", "width": "800" } 23 Klasa abstrakcyjna { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_23.jpg", "name": "Klasa abstrakcyjna", "description": "Klasa abstrakcyjna", "width": "800" } 24 interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); function witaj() { return "cześć!"; } Klasa abstrakcyjna [1] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_24.jpg", "name": "interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); function witaj() { return cześć! ; } Klasa abstrakcyjna [1]", "description": "interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); function witaj() { return cześć! ; } Klasa abstrakcyjna [1]", "width": "800" } 25 class student extends student_baza implements student_budowa { private $imie; private $nazwisko; function __construct($imie="", $nazwisko="") { $this->imie = $imie; $this->nazwisko = $nazwisko; } function pobierz_imie(){ return $this->imie; } function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } function ustaw_dane($imie="", $nazwisko=""){ $this->imie = $imie; $this->nazwisko = $nazwisko; } Klasa abstrakcyjna [2] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_25.jpg", "name": "class student extends student_baza implements student_budowa { private $imie; private $nazwisko; function __construct($imie= , $nazwisko= ) { $this->imie = $imie; $this->nazwisko = $nazwisko; } function pobierz_imie(){ return $this->imie; } function odczytaj_dane(){ return $this->imie.", "description": ", . $this->nazwisko; } function ustaw_dane($imie= , $nazwisko= ){ $this->imie = $imie; $this->nazwisko = $nazwisko; } Klasa abstrakcyjna [2].", "width": "800" } 26 Klasa abstrakcyjna [3] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_26.jpg", "name": "witaj(); echo $s->pobierz_imie(); > Klasa abstrakcyjna [3].", "width": "800" } 27 abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); abstract function pobierz_nazwisko(); function witaj() { return "cześć!"; } Klasa abstrakcyjna [4] { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_27.jpg", "name": "abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); abstract function pobierz_nazwisko(); function witaj() { return cześć! ; } Klasa abstrakcyjna [4]", "description": "abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); abstract function pobierz_nazwisko(); function witaj() { return cześć! ; } Klasa abstrakcyjna [4]", "width": "800" } 28 Zmienne i metody statyczne odwołanie do funkcji i zmiennych klasy nie poprzez obiekt elementy statyczne definiowane są operatorem static dostęp publiczny zamiast $this-> używamy self:: parent:: { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_28.jpg", "name": "Zmienne i metody statyczne odwołanie do funkcji i zmiennych klasy nie poprzez obiekt elementy statyczne definiowane są operatorem static dostęp publiczny zamiast $this-> używamy self:: parent::", "description": "Zmienne i metody statyczne odwołanie do funkcji i zmiennych klasy nie poprzez obiekt elementy statyczne definiowane są operatorem static dostęp publiczny zamiast $this-> używamy self:: parent::", "width": "800" } 29 class mysqlp { //klasa połączeniowa public static $login, $haslo, $bd, $IP; public static $link; function dane($login="",$haslo="", $bd="", $IP="localhost"){ self::$login=$login; self::$haslo=$haslo; self::$bd=$bd; self::$IP=$IP; } function polacz(){ self::$link = mysqli_connect(self::$IP, self::$login, self::$haslo, self::$bd); echo "połączono..\n"; } } //class operator dwukropka [1] :: { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_29.jpg", "name": "class mysqlp { //klasa połączeniowa public static $login, $haslo, $bd, $IP; public static $link; function dane($login= ,$haslo= , $bd= , $IP= localhost ){ self::$login=$login; self::$haslo=$haslo; self::$bd=$bd; self::$IP=$IP; } function polacz(){ self::$link = mysqli_connect(self::$IP, self::$login, self::$haslo, self::$bd); echo połączono..\n ; } } //class operator dwukropka [1] ::", "description": "class mysqlp { //klasa połączeniowa public static $login, $haslo, $bd, $IP; public static $link; function dane($login= ,$haslo= , $bd= , $IP= localhost ){ self::$login=$login; self::$haslo=$haslo; self::$bd=$bd; self::$IP=$IP; } function polacz(){ self::$link = mysqli_connect(self::$IP, self::$login, self::$haslo, self::$bd); echo połączono..\n ; } } //class operator dwukropka [1] ::", "width": "800" } 30 class mysqlz extends mysqlp {//klasa do zapytań public static $wynik; function zapytanie($q=""){self::$wynik = mysqli_query(self::$link, $q);} function pokaz_wynik(){ while ($tabl = mysqli_fetch_assoc(self::$wynik)){ foreach($tabl as $k=>$v) { echo "$k => $v \n"; } }//while }//function public function polacz(){ if (mysqli_real_connect(self::$link, self::$IP,self::$login, self::$haslo, self::$bd)) { echo "połączenie z bazą danych jest aktywne..."; }; } public function polacz_ponownie(){ parent::polacz(); } }//class operator dwukropka [2] :: { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_30.jpg", "name": "class mysqlz extends mysqlp {//klasa do zapytań public static $wynik; function zapytanie($q= ){self::$wynik = mysqli_query(self::$link, $q);} function pokaz_wynik(){ while ($tabl = mysqli_fetch_assoc(self::$wynik)){ foreach($tabl as $k=>$v) { echo $k => $v \n ; } }//while }//function public function polacz(){ if (mysqli_real_connect(self::$link, self::$IP,self::$login, self::$haslo, self::$bd)) { echo połączenie z bazą danych jest aktywne... ; }; } public function polacz_ponownie(){ parent::polacz(); } }//class operator dwukropka [2] ::", "description": "class mysqlz extends mysqlp {//klasa do zapytań public static $wynik; function zapytanie($q= ){self::$wynik = mysqli_query(self::$link, $q);} function pokaz_wynik(){ while ($tabl = mysqli_fetch_assoc(self::$wynik)){ foreach($tabl as $k=>$v) { echo $k => $v \n ; } }//while }//function public function polacz(){ if (mysqli_real_connect(self::$link, self::$IP,self::$login, self::$haslo, self::$bd)) { echo połączenie z bazą danych jest aktywne... ; }; } public function polacz_ponownie(){ parent::polacz(); } }//class operator dwukropka [2] ::", "width": "800" } 31 operator dwukropka [3] :: { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_31.jpg", "name": " operator dwukropka [3] ::.", "width": "800" } 32 Trochę JavaScript'u … AJAX { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_32.jpg", "name": "Trochę JavaScript u … AJAX", "description": "Trochę JavaScript u … AJAX", "width": "800" } 33 Kilka słów o języku JavaScript 1.język skryptowy 2.działa po stronie przeglądarki 3.powstał w 1995 roku wraz z przeglądarką Netscape 2.0 4.początkowe nazwy: Mocha, LiveScript 5.po umowie w firmą Sun – JavaScript 6.w Internet Explorer od wersji 3.0 (rok 1996) – Jscript (z przyczyn prawnych) 7.ECMAScript – rok 1997 – standard definiuje kluczowe elementy języka 8.ECMAScript w 1998 został uznany za normę ISO { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_33.jpg", "name": "Kilka słów o języku JavaScript 1.język skryptowy 2.działa po stronie przeglądarki 3.powstał w 1995 roku wraz z przeglądarką Netscape 2.0 4.początkowe nazwy: Mocha, LiveScript 5.po umowie w firmą Sun – JavaScript 6.w Internet Explorer od wersji 3.0 (rok 1996) – Jscript (z przyczyn prawnych) 7.ECMAScript – rok 1997 – standard definiuje kluczowe elementy języka 8.ECMAScript w 1998 został uznany za normę ISO", "description": "Kilka słów o języku JavaScript 1.język skryptowy 2.działa po stronie przeglądarki 3.powstał w 1995 roku wraz z przeglądarką Netscape 2.0 4.początkowe nazwy: Mocha, LiveScript 5.po umowie w firmą Sun – JavaScript 6.w Internet Explorer od wersji 3.0 (rok 1996) – Jscript (z przyczyn prawnych) 7.ECMAScript – rok 1997 – standard definiuje kluczowe elementy języka 8.ECMAScript w 1998 został uznany za normę ISO", "width": "800" } 34 Umieszczanie kodu w ciele strony { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_34.jpg", "name": "Umieszczanie kodu w ciele strony", "description": "Umieszczanie kodu w ciele strony", "width": "800" } 35 Dynamiczne umieszczanie plików zewnętrznych { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_35.jpg", "name": "Dynamiczne umieszczanie plików zewnętrznych", "description": "Dynamiczne umieszczanie plików zewnętrznych", "width": "800" } 36 Umieszczanie w pseudoadresach URL { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_36.jpg", "name": "Umieszczanie w pseudoadresach URL", "description": "Umieszczanie w pseudoadresach URL", "width": "800" } 37 Wykonanie kodu za pomocą obsługi zdarzeń na obiektach. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_37.jpg", "name": "Wykonanie kodu za pomocą obsługi zdarzeń na obiektach.", "description": "Wykonanie kodu za pomocą obsługi zdarzeń na obiektach.", "width": "800" } 38 Wywołanie kodu JavaScript wraz z odnośnikiem. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_38.jpg", "name": "Wywołanie kodu JavaScript wraz z odnośnikiem.", "description": "Wywołanie kodu JavaScript wraz z odnośnikiem.", "width": "800" } 39 document.write("Obsługa JavaScript: TAK"); Obsługa JavaScript: NIE Obsługa przeglądarki, w której jest wyłączona obsługa języka JavaScript lub przeglądarka go nie obsługuje. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_39.jpg", "name": "document.write( Obsługa JavaScript: TAK ); Obsługa JavaScript: NIE Obsługa przeglądarki, w której jest wyłączona obsługa języka JavaScript lub przeglądarka go nie obsługuje.", "description": "document.write( Obsługa JavaScript: TAK ); Obsługa JavaScript: NIE Obsługa przeglądarki, w której jest wyłączona obsługa języka JavaScript lub przeglądarka go nie obsługuje.", "width": "800" } 40 Detekcja przeglądarki { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_40.jpg", "name": "Detekcja przeglądarki", "description": "Detekcja przeglądarki", "width": "800" } 41 Wykorzystanie navigator.appName { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_41.jpg", "name": "Wykorzystanie navigator.appName", "description": "Wykorzystanie navigator.appName", "width": "800" } 42 Wykorzystanie navigator.userAgent { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_42.jpg", "name": "Wykorzystanie navigator.userAgent", "description": "Wykorzystanie navigator.userAgent", "width": "800" } 43 Sprawdzanie obsługi funkcji wymaganych przez stronę internetową. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_43.jpg", "name": "Sprawdzanie obsługi funkcji wymaganych przez stronę internetową.", "description": "Sprawdzanie obsługi funkcji wymaganych przez stronę internetową.", "width": "800" } 44 Zapobieganie buforowaniu obrazków za pomocą JavaScript. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_44.jpg", "name": "Zapobieganie buforowaniu obrazków za pomocą JavaScript.", "description": "Zapobieganie buforowaniu obrazków za pomocą JavaScript.", "width": "800" } 45 Zapobieganie buforowaniu dokumentów za pomocą JavaScript. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_45.jpg", "name": "Zapobieganie buforowaniu dokumentów za pomocą JavaScript.", "description": "Zapobieganie buforowaniu dokumentów za pomocą JavaScript.", "width": "800" } 46 Przekierowanie i odświeżanie strony internetowej { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_46.jpg", "name": "Przekierowanie i odświeżanie strony internetowej", "description": "Przekierowanie i odświeżanie strony internetowej", "width": "800" } 47 Przekierowanie strony internetowej. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_47.jpg", "name": "Przekierowanie strony internetowej.", "description": "Przekierowanie strony internetowej.", "width": "800" } 48 Przekierowanie strony internetowej za pomocą HTMLa. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_48.jpg", "name": "Przekierowanie strony internetowej za pomocą HTMLa.", "description": "Przekierowanie strony internetowej za pomocą HTMLa.", "width": "800" } 49 Opóźnienie przekierowania strony internetowej. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_49.jpg", "name": "Opóźnienie przekierowania strony internetowej.", "description": "Opóźnienie przekierowania strony internetowej.", "width": "800" } 50 Podmiana strony internetowej. Poprzednia strona nie zapisuje się w historii przeglądanych stron. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_50.jpg", "name": "Podmiana strony internetowej. Poprzednia strona nie zapisuje się w historii przeglądanych stron.", "description": "Podmiana strony internetowej. Poprzednia strona nie zapisuje się w historii przeglądanych stron.", "width": "800" } 51 Odświeżenie strony internetowej. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_51.jpg", "name": "Odświeżenie strony internetowej.", "description": "Odświeżenie strony internetowej.", "width": "800" } 52 Zapobieganie buforowaniu. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_52.jpg", "name": "Zapobieganie buforowaniu.", "description": "Zapobieganie buforowaniu.", "width": "800" } 53 Odczytywanie daty i czasu { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_53.jpg", "name": "Odczytywanie daty i czasu", "description": "Odczytywanie daty i czasu", "width": "800" } 54 Wykorzystanie obiektu Date. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_54.jpg", "name": "Wykorzystanie obiektu Date.", "description": "Wykorzystanie obiektu Date.", "width": "800" } 55 Wybrane metody obiektu Date. metodaopis getDate()aktualny dzień miesiąca getFullYear()aktualny rok w pełnym formacie getHours()aktualna godzina getMinutes()aktualne minuty getSeconds()aktualne sekundy getMonth()+1aktualny miesiąc toString()konwersja do ciągu { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_55.jpg", "name": "Wybrane metody obiektu Date.", "description": "metodaopis getDate()aktualny dzień miesiąca getFullYear()aktualny rok w pełnym formacie getHours()aktualna godzina getMinutes()aktualne minuty getSeconds()aktualne sekundy getMonth()+1aktualny miesiąc toString()konwersja do ciągu.", "width": "800" } 56 Wyświetlenie daty modyfikacji strony. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_56.jpg", "name": "Wyświetlenie daty modyfikacji strony.", "description": "Wyświetlenie daty modyfikacji strony.", "width": "800" } 57 Nawigacja w historii przeglądarki. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_57.jpg", "name": "Nawigacja w historii przeglądarki.", "description": "Nawigacja w historii przeglądarki.", "width": "800" } 58 Okna z komunikatami { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_58.jpg", "name": "Okna z komunikatami", "description": "Okna z komunikatami", "width": "800" } 59 Okno alert. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_59.jpg", "name": "Okno alert.", "description": "Okno alert.", "width": "800" } 60 Okno confirm. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_60.jpg", "name": "Okno confirm.", "description": "Okno confirm.", "width": "800" } 61 Okno prompt. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_61.jpg", "name": "Okno prompt.", "description": "Okno prompt.", "width": "800" } 62 AJAX { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_62.jpg", "name": "AJAX", "description": "AJAX", "width": "800" } 63 Termin wymyślony w 2005 roku przez Jesse James Garret, oznacza z j. ang. Asynchronous JavaScript and XML, czyli asynchroniczny JavaScript i XML. Jest to technologia tworzenia stron internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowania całej strony internetowej, a dane pobierane są dynamicznie i umieszczane w konkretne miejsca w dokumencie internetowym. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_63.jpg", "name": "Termin wymyślony w 2005 roku przez Jesse James Garret, oznacza z j.", "description": "ang. Asynchronous JavaScript and XML, czyli asynchroniczny JavaScript i XML. Jest to technologia tworzenia stron internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowania całej strony internetowej, a dane pobierane są dynamicznie i umieszczane w konkretne miejsca w dokumencie internetowym..", "width": "800" } 64 AJAX Na technologię AJAX składają się następujące elementy: 1.XMLHttpRequest – klasa umożliwiająca przesyłanie danych. W trakcie przesyłu danych użytkownik może wykonywać inne czynności na stronie. Dane mogą być pobierane z różnych plików umiejscowionych serwerze tej samej domeny w jednej chwili. 2.JavaScript – język skryptowy. W rzeczywistości może być to dowolny język skryptowy działający po stronie przeglądarki internetowej (np. VBScript). 3.XML – z j. ang. Extensible Markup Language, czyli Rozszerzalny Język Znaczników – uniwersalny język formalny, dzięki któremu istnieje możliwość reprezentowania różnych danych w strukturalizowany sposób. W praktyce, w tej technologii przesyłane są fragmenty stron internetowych napisane w HTMLu. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_64.jpg", "name": "AJAX Na technologię AJAX składają się następujące elementy: 1.XMLHttpRequest – klasa umożliwiająca przesyłanie danych.", "description": "W trakcie przesyłu danych użytkownik może wykonywać inne czynności na stronie. Dane mogą być pobierane z różnych plików umiejscowionych serwerze tej samej domeny w jednej chwili. 2.JavaScript – język skryptowy. W rzeczywistości może być to dowolny język skryptowy działający po stronie przeglądarki internetowej (np. VBScript). 3.XML – z j. ang. Extensible Markup Language, czyli Rozszerzalny Język Znaczników – uniwersalny język formalny, dzięki któremu istnieje możliwość reprezentowania różnych danych w strukturalizowany sposób. W praktyce, w tej technologii przesyłane są fragmenty stron internetowych napisane w HTMLu..", "width": "800" } 65 AJAX Wady technologii: 1.Strony funkcjonują w oparciu o język skryptowy. To sprawia, że strony są dostępne wyłącznie dla użytkowników, u których nie jest zablokowana obsługa języków skryptowych w przeglądarkach internetowych. 2.Utrudnienia podczas pobierania strony internetowych na dysk. Fragmenty stron, które wypełnione są danymi z użyciem technologii AJAX, nie będą zapisane w pliku. 3.Problem z indeksowaniem stron przez roboty wyszukiwarek internetowych. 4.Jeżeli przeglądanie podstron danej witryny internetowej oparte jest wyłącznie o AJAX, to w tym momencie przestaje funkcjonować standardowy model przeglądania strony internetowej, co może skutkować niechęcią pewnej części użytkowników. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_65.jpg", "name": "AJAX Wady technologii: 1.Strony funkcjonują w oparciu o język skryptowy.", "description": "To sprawia, że strony są dostępne wyłącznie dla użytkowników, u których nie jest zablokowana obsługa języków skryptowych w przeglądarkach internetowych. 2.Utrudnienia podczas pobierania strony internetowych na dysk. Fragmenty stron, które wypełnione są danymi z użyciem technologii AJAX, nie będą zapisane w pliku. 3.Problem z indeksowaniem stron przez roboty wyszukiwarek internetowych. 4.Jeżeli przeglądanie podstron danej witryny internetowej oparte jest wyłącznie o AJAX, to w tym momencie przestaje funkcjonować standardowy model przeglądania strony internetowej, co może skutkować niechęcią pewnej części użytkowników..", "width": "800" } 66 AJAX Reasumując: w technologii AJAX chodzi wyłącznie o zastosowanie XMLHttpRequest do wysyłania żądań HTTP do serwera WWW i użycie języka JavaScript (lub innego skryptowego) do wykonania odpowiednich działań i wyświetlenia danych po stronie użytkownika. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_66.jpg", "name": "AJAX Reasumując: w technologii AJAX chodzi wyłącznie o zastosowanie XMLHttpRequest do wysyłania żądań HTTP do serwera WWW i użycie języka JavaScript (lub innego skryptowego) do wykonania odpowiednich działań i wyświetlenia danych po stronie użytkownika.", "description": "AJAX Reasumując: w technologii AJAX chodzi wyłącznie o zastosowanie XMLHttpRequest do wysyłania żądań HTTP do serwera WWW i użycie języka JavaScript (lub innego skryptowego) do wykonania odpowiednich działań i wyświetlenia danych po stronie użytkownika.", "width": "800" } 67 Inicjowanie aplikacji AJAX XMLHttp = new XMLHttpRequest(); XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); Obiekt XMLHttpRequest jest podstawą technologii AJAX. Jest on obsługiwany przez wszystkie przeglądarki obsługujące AJAX, natomiast w przypadku niektórych wersji Internet Explorer, wymagany jest obiekt ActiveX. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_67.jpg", "name": "Inicjowanie aplikacji AJAX XMLHttp = new XMLHttpRequest(); XMLHttp = new ActiveXObject( Microsoft.XMLHTTP ); Obiekt XMLHttpRequest jest podstawą technologii AJAX.", "description": "Jest on obsługiwany przez wszystkie przeglądarki obsługujące AJAX, natomiast w przypadku niektórych wersji Internet Explorer, wymagany jest obiekt ActiveX..", "width": "800" } 68 Tworzenie nowego obiektu XMLHttpRequest AJAX { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_68.jpg", "name": "Tworzenie nowego obiektu XMLHttpRequest AJAX", "description": "Tworzenie nowego obiektu XMLHttpRequest AJAX", "width": "800" } 69 Przykład utworzenia nowego obiektu XMLHttpRequest. plik: xmlhttp.js { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_69.jpg", "name": "Przykład utworzenia nowego obiektu XMLHttpRequest. plik: xmlhttp.js", "description": "Przykład utworzenia nowego obiektu XMLHttpRequest. plik: xmlhttp.js", "width": "800" } 70 Wysyłanie żądania GET AJAX { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_70.jpg", "name": "Wysyłanie żądania GET AJAX", "description": "Wysyłanie żądania GET AJAX", "width": "800" } 71 Wysyłanie żądania GET { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_71.jpg", "name": "Wysyłanie żądania GET", "description": "Wysyłanie żądania GET", "width": "800" } 72 var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php"); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert("Wczytane dane: " + XMLHttp.responseText); } Wysyłanie żądania GET { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_72.jpg", "name": "var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php ); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert( Wczytane dane: + XMLHttp.responseText); } Wysyłanie żądania GET", "description": "var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php ); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert( Wczytane dane: + XMLHttp.responseText); } Wysyłanie żądania GET", "width": "800" } 73 Stany obiektu XMLHttpRequest 0 – nie zainicjowano 1 – wczytywanie 2 – wczytanie 3 – oczekiwanie 4 – zakończenie { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_73.jpg", "name": "Stany obiektu XMLHttpRequest 0 – nie zainicjowano 1 – wczytywanie 2 – wczytanie 3 – oczekiwanie 4 – zakończenie", "description": "Stany obiektu XMLHttpRequest 0 – nie zainicjowano 1 – wczytywanie 2 – wczytanie 3 – oczekiwanie 4 – zakończenie", "width": "800" } 74 AJAX Wysyłanie żądania POST { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_74.jpg", "name": "AJAX Wysyłanie żądania POST", "description": "AJAX Wysyłanie żądania POST", "width": "800" } 75 XMLHttp.setRequestHeader("Content-type", "application/x-www-form- urlencoded"); XMLHttp.send("zmienna1=Technologia&zmienna2=AJAX"); W przeciwieństwie do metody GET, metoda POST nie wysyła parametrów w adresie, lecz w parametrach metody send(). { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_75.jpg", "name": "XMLHttp.setRequestHeader( Content-type , application/x-www-form- urlencoded ); XMLHttp.send( zmienna1=Technologia&zmienna2=AJAX ); W przeciwieństwie do metody GET, metoda POST nie wysyła parametrów w adresie, lecz w parametrach metody send().", "description": "XMLHttp.setRequestHeader( Content-type , application/x-www-form- urlencoded ); XMLHttp.send( zmienna1=Technologia&zmienna2=AJAX ); W przeciwieństwie do metody GET, metoda POST nie wysyła parametrów w adresie, lecz w parametrach metody send().", "width": "800" } 76 Wysyłanie żądania POST { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_76.jpg", "name": "Wysyłanie żądania POST", "description": "Wysyłanie żądania POST", "width": "800" } 77 AJAX Żądania synchroniczne { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_77.jpg", "name": "AJAX Żądania synchroniczne", "description": "AJAX Żądania synchroniczne", "width": "800" } 78 XMLHttp.open("GET", "plik.php", false); Trzeci parametry metody open przyjmuje wartość false. Bez podania parametru trzeciego, domyślnie jest true – czyli żądanie asynchroniczne. Wywołanie synchroniczne zatrzymuje całkowicie wykonywanie skryptu. Jeżeli łącze jest wolne lub serwer jest przeciążony strona będzie się zacinać. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_78.jpg", "name": "XMLHttp.open( GET , plik.php , false); Trzeci parametry metody open przyjmuje wartość false.", "description": "Bez podania parametru trzeciego, domyślnie jest true – czyli żądanie asynchroniczne. Wywołanie synchroniczne zatrzymuje całkowicie wykonywanie skryptu. Jeżeli łącze jest wolne lub serwer jest przeciążony strona będzie się zacinać..", "width": "800" } 79 wczytywanie danych... window.onload = function() { var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php", false); XMLHttp.send(null); document.getElementById("tresc").innerHTML = XMLHttp.responseText; } Żądania synchroniczne { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_79.jpg", "name": "wczytywanie danych...", "description": "window.onload = function() { var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php , false); XMLHttp.send(null); document.getElementById( tresc ).innerHTML = XMLHttp.responseText; } Żądania synchroniczne.", "width": "800" } 80 AJAX Przerwanie żądania HTTP { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_80.jpg", "name": "AJAX Przerwanie żądania HTTP", "description": "AJAX Przerwanie żądania HTTP", "width": "800" } 81 XMLHttp.abort(); Sens przerwania pobierania danych ma miejsce wtedy, gdy wartość parametru readyState jest różna od 4 i od 0. W przeciwnym wypadku nie ma czego przerywać. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_81.jpg", "name": "XMLHttp.abort(); Sens przerwania pobierania danych ma miejsce wtedy, gdy wartość parametru readyState jest różna od 4 i od 0.", "description": "W przeciwnym wypadku nie ma czego przerywać..", "width": "800" } 82 var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "czekaj.php?" + Math.random()); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); window.setTimeout("timeout();", 5000); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert("Wczytane dane: " + XMLHttp.responseText); } function timeout() { if (XMLHttp.readyState != 4 && XMLHttp.readyState != 0) { XMLHttp.onreadystatechange = function() { }; XMLHttp.abort(); window.alert("Anulowano pobieranie danych"); } Przerwanie żądania HTTP { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_82.jpg", "name": "var XMLHttp = getXMLHttp(); XMLHttp.open( GET , czekaj.php + Math.random()); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); window.setTimeout( timeout(); , 5000); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert( Wczytane dane: + XMLHttp.responseText); } function timeout() { if (XMLHttp.readyState != 4 && XMLHttp.readyState != 0) { XMLHttp.onreadystatechange = function() { }; XMLHttp.abort(); window.alert( Anulowano pobieranie danych ); } Przerwanie żądania HTTP", "description": "var XMLHttp = getXMLHttp(); XMLHttp.open( GET , czekaj.php + Math.random()); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); window.setTimeout( timeout(); , 5000); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert( Wczytane dane: + XMLHttp.responseText); } function timeout() { if (XMLHttp.readyState != 4 && XMLHttp.readyState != 0) { XMLHttp.onreadystatechange = function() { }; XMLHttp.abort(); window.alert( Anulowano pobieranie danych ); } Przerwanie żądania HTTP", "width": "800" } 83 AJAX Pobranie nagłówków HTTP { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_83.jpg", "name": "AJAX Pobranie nagłówków HTTP", "description": "AJAX Pobranie nagłówków HTTP", "width": "800" } 84 Pobranie nagłówka HTTP var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php"); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var servertype = XMLHttp.getResponseHeader("Server"); window.alert("Serwer WWW: " + servertype); } { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_84.jpg", "name": "Pobranie nagłówka HTTP var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php ); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var servertype = XMLHttp.getResponseHeader( Server ); window.alert( Serwer WWW: + servertype); }", "description": "Pobranie nagłówka HTTP var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php ); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var servertype = XMLHttp.getResponseHeader( Server ); window.alert( Serwer WWW: + servertype); }", "width": "800" } 85 Pobranie nagłówków HTTP var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php", false); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var serverinfo = XMLHttp.getAllResponseHeaders(); document.write(serverinfo); } { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_85.jpg", "name": "Pobranie nagłówków HTTP var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php , false); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var serverinfo = XMLHttp.getAllResponseHeaders(); document.write(serverinfo); }", "description": "Pobranie nagłówków HTTP var XMLHttp = getXMLHttp(); XMLHttp.open( GET , plik.php , false); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var serverinfo = XMLHttp.getAllResponseHeaders(); document.write(serverinfo); }", "width": "800" } 86 AJAX Sprawdzenie istnienia pliku na serwerze – zmienna status. { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_86.jpg", "name": "AJAX Sprawdzenie istnienia pliku na serwerze – zmienna status.", "description": "AJAX Sprawdzenie istnienia pliku na serwerze – zmienna status.", "width": "800" } 87 XMLHttp.status wczytywanie danych... window.onload = function() { var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "xplik.php", false); XMLHttp.send(null); tresc = XMLHttp.responseText; if (XMLHttp.status == 404) { tresc = " brak pliku! "; } document.getElementById("tresc").innerHTML = tresc; } { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_87.jpg", "name": "XMLHttp.status wczytywanie danych...", "description": "window.onload = function() { var XMLHttp = getXMLHttp(); XMLHttp.open( GET , xplik.php , false); XMLHttp.send(null); tresc = XMLHttp.responseText; if (XMLHttp.status == 404) { tresc = brak pliku. ; } document.getElementById( tresc ).innerHTML = tresc; }.", "width": "800" } 88 AJAX Wybrane kody odpowiedzi HTTP { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_88.jpg", "name": "AJAX Wybrane kody odpowiedzi HTTP", "description": "AJAX Wybrane kody odpowiedzi HTTP", "width": "800" } 89 Wybrane kody odpowiedzi HTTP. Kody informacyjne 110 – Connection Timed Out. Przekroczono czas połączenia. Serwer zbyt długo nie odpowiada. 111 – Connection refused. Serwer odrzucił połączenie Kody powodzenia 200 – OK. Zawartość żądanego dokumentu (najczęściej zwracany nagłówek odpowiedzi w komunikacji WWW Internetu) { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_89.jpg", "name": "Wybrane kody odpowiedzi HTTP. Kody informacyjne 110 – Connection Timed Out.", "description": "Przekroczono czas połączenia. Serwer zbyt długo nie odpowiada. 111 – Connection refused. Serwer odrzucił połączenie Kody powodzenia 200 – OK. Zawartość żądanego dokumentu (najczęściej zwracany nagłówek odpowiedzi w komunikacji WWW Internetu).", "width": "800" } 90 Wybrane kody odpowiedzi HTTP. Kody przekierowania 400 – Bad Request. Nieprawidłowe zapytanie – żądanie nie może być obsłużone przez serwer z powodu błędnej składni zapytania 403 – Forbidden. Zabroniony – serwer zrozumiał zapytanie lecz konfiguracja bezpieczeństwa zabrania mu zwrócić żądany zasób 404 – Not Found. Nie znaleziono – serwer nie odnalazł zasobu według podanego URL ani niczego co by wskazywało na istnienie takiego zasobu w przeszłości 414 – Request-URI Too Long. Adres URI zapytania zbyt długi – długość zażądanego URI jest większa niż maksymalna oczekiwana przez serwer 500 – Internal Server Error. Wewnętrzny błąd serwera – serwer napotkał niespodziewane trudności, które uniemożliwiły zrealizowanie żądania { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.pl/10/2886069/slides/slide_90.jpg", "name": "Wybrane kody odpowiedzi HTTP. Kody przekierowania 400 – Bad Request.", "description": "Nieprawidłowe zapytanie – żądanie nie może być obsłużone przez serwer z powodu błędnej składni zapytania 403 – Forbidden. Zabroniony – serwer zrozumiał zapytanie lecz konfiguracja bezpieczeństwa zabrania mu zwrócić żądany zasób 404 – Not Found. Nie znaleziono – serwer nie odnalazł zasobu według podanego URL ani niczego co by wskazywało na istnienie takiego zasobu w przeszłości 414 – Request-URI Too Long. Adres URI zapytania zbyt długi – długość zażądanego URI jest większa niż maksymalna oczekiwana przez serwer 500 – Internal Server Error. Wewnętrzny błąd serwera – serwer napotkał niespodziewane trudności, które uniemożliwiły zrealizowanie żądania.", "width": "800" } 91 C. D. N.

17 Referencje i klonowanie = clone

18 Referencje i klonowanie

19 Referencje i klonowanie

20 Interfejs interfejs jest definicją abstrakcyjnego typu posiadającego jedynie operacje, a nie dane.

21 interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } class student implements student_budowa { private $imie; private $nazwisko; function __construct($imie="", $nazwisko="") { $this->imie = $imie; $this->nazwisko = $nazwisko; } function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } function ustaw_dane($imie="", $nazwisko=""){ $this->imie = $imie; $this->nazwisko = $nazwisko; } Interfejsy

22 interface student_budowa { function odczytaj_dane(); function ustaw_daneX($imie, $nazwisko); } Interfejsy

23 Klasa abstrakcyjna

24 interface student_budowa { function odczytaj_dane(); function ustaw_dane($imie, $nazwisko); } abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); function witaj() { return "cześć!"; } Klasa abstrakcyjna [1]

25 class student extends student_baza implements student_budowa { private $imie; private $nazwisko; function __construct($imie="", $nazwisko="") { $this->imie = $imie; $this->nazwisko = $nazwisko; } function pobierz_imie(){ return $this->imie; } function odczytaj_dane(){ return $this->imie. ", ". $this->nazwisko; } function ustaw_dane($imie="", $nazwisko=""){ $this->imie = $imie; $this->nazwisko = $nazwisko; } Klasa abstrakcyjna [2]

26 Klasa abstrakcyjna [3]

27 abstract class student_baza { private $nazwisko; abstract function pobierz_imie(); abstract function pobierz_nazwisko(); function witaj() { return "cześć!"; } Klasa abstrakcyjna [4]

28 Zmienne i metody statyczne odwołanie do funkcji i zmiennych klasy nie poprzez obiekt elementy statyczne definiowane są operatorem static dostęp publiczny zamiast $this-> używamy self:: parent::

29 class mysqlp { //klasa połączeniowa public static $login, $haslo, $bd, $IP; public static $link; function dane($login="",$haslo="", $bd="", $IP="localhost"){ self::$login=$login; self::$haslo=$haslo; self::$bd=$bd; self::$IP=$IP; } function polacz(){ self::$link = mysqli_connect(self::$IP, self::$login, self::$haslo, self::$bd); echo "połączono..\n"; } } //class operator dwukropka [1] ::

30 class mysqlz extends mysqlp {//klasa do zapytań public static $wynik; function zapytanie($q=""){self::$wynik = mysqli_query(self::$link, $q);} function pokaz_wynik(){ while ($tabl = mysqli_fetch_assoc(self::$wynik)){ foreach($tabl as $k=>$v) { echo "$k => $v \n"; } }//while }//function public function polacz(){ if (mysqli_real_connect(self::$link, self::$IP,self::$login, self::$haslo, self::$bd)) { echo "połączenie z bazą danych jest aktywne..."; }; } public function polacz_ponownie(){ parent::polacz(); } }//class operator dwukropka [2] ::

31 operator dwukropka [3] ::

32 Trochę JavaScript'u … AJAX

33 Kilka słów o języku JavaScript 1.język skryptowy 2.działa po stronie przeglądarki 3.powstał w 1995 roku wraz z przeglądarką Netscape 2.0 4.początkowe nazwy: Mocha, LiveScript 5.po umowie w firmą Sun – JavaScript 6.w Internet Explorer od wersji 3.0 (rok 1996) – Jscript (z przyczyn prawnych) 7.ECMAScript – rok 1997 – standard definiuje kluczowe elementy języka 8.ECMAScript w 1998 został uznany za normę ISO

34 Umieszczanie kodu w ciele strony

35 Dynamiczne umieszczanie plików zewnętrznych

36 Umieszczanie w pseudoadresach URL

37 Wykonanie kodu za pomocą obsługi zdarzeń na obiektach.

38 Wywołanie kodu JavaScript wraz z odnośnikiem.

39 document.write("Obsługa JavaScript: TAK"); Obsługa JavaScript: NIE Obsługa przeglądarki, w której jest wyłączona obsługa języka JavaScript lub przeglądarka go nie obsługuje.

40 Detekcja przeglądarki

41 Wykorzystanie navigator.appName

42 Wykorzystanie navigator.userAgent

43 Sprawdzanie obsługi funkcji wymaganych przez stronę internetową.

44 Zapobieganie buforowaniu obrazków za pomocą JavaScript.

45 Zapobieganie buforowaniu dokumentów za pomocą JavaScript.

46 Przekierowanie i odświeżanie strony internetowej

47 Przekierowanie strony internetowej.

48 Przekierowanie strony internetowej za pomocą HTMLa.

49 Opóźnienie przekierowania strony internetowej.

50 Podmiana strony internetowej. Poprzednia strona nie zapisuje się w historii przeglądanych stron.

51 Odświeżenie strony internetowej.

52 Zapobieganie buforowaniu.

53 Odczytywanie daty i czasu

54 Wykorzystanie obiektu Date.

55 Wybrane metody obiektu Date. metodaopis getDate()aktualny dzień miesiąca getFullYear()aktualny rok w pełnym formacie getHours()aktualna godzina getMinutes()aktualne minuty getSeconds()aktualne sekundy getMonth()+1aktualny miesiąc toString()konwersja do ciągu

56 Wyświetlenie daty modyfikacji strony.

57 Nawigacja w historii przeglądarki.

58 Okna z komunikatami

59 Okno alert.

60 Okno confirm.

61 Okno prompt.

62 AJAX

63 Termin wymyślony w 2005 roku przez Jesse James Garret, oznacza z j. ang. Asynchronous JavaScript and XML, czyli asynchroniczny JavaScript i XML. Jest to technologia tworzenia stron internetowych, w której interakcja użytkownika z serwerem odbywa się bez przeładowania całej strony internetowej, a dane pobierane są dynamicznie i umieszczane w konkretne miejsca w dokumencie internetowym.

64 AJAX Na technologię AJAX składają się następujące elementy: 1.XMLHttpRequest – klasa umożliwiająca przesyłanie danych. W trakcie przesyłu danych użytkownik może wykonywać inne czynności na stronie. Dane mogą być pobierane z różnych plików umiejscowionych serwerze tej samej domeny w jednej chwili. 2.JavaScript – język skryptowy. W rzeczywistości może być to dowolny język skryptowy działający po stronie przeglądarki internetowej (np. VBScript). 3.XML – z j. ang. Extensible Markup Language, czyli Rozszerzalny Język Znaczników – uniwersalny język formalny, dzięki któremu istnieje możliwość reprezentowania różnych danych w strukturalizowany sposób. W praktyce, w tej technologii przesyłane są fragmenty stron internetowych napisane w HTMLu.

65 AJAX Wady technologii: 1.Strony funkcjonują w oparciu o język skryptowy. To sprawia, że strony są dostępne wyłącznie dla użytkowników, u których nie jest zablokowana obsługa języków skryptowych w przeglądarkach internetowych. 2.Utrudnienia podczas pobierania strony internetowych na dysk. Fragmenty stron, które wypełnione są danymi z użyciem technologii AJAX, nie będą zapisane w pliku. 3.Problem z indeksowaniem stron przez roboty wyszukiwarek internetowych. 4.Jeżeli przeglądanie podstron danej witryny internetowej oparte jest wyłącznie o AJAX, to w tym momencie przestaje funkcjonować standardowy model przeglądania strony internetowej, co może skutkować niechęcią pewnej części użytkowników.

66 AJAX Reasumując: w technologii AJAX chodzi wyłącznie o zastosowanie XMLHttpRequest do wysyłania żądań HTTP do serwera WWW i użycie języka JavaScript (lub innego skryptowego) do wykonania odpowiednich działań i wyświetlenia danych po stronie użytkownika.

67 Inicjowanie aplikacji AJAX XMLHttp = new XMLHttpRequest(); XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); Obiekt XMLHttpRequest jest podstawą technologii AJAX. Jest on obsługiwany przez wszystkie przeglądarki obsługujące AJAX, natomiast w przypadku niektórych wersji Internet Explorer, wymagany jest obiekt ActiveX.

68 Tworzenie nowego obiektu XMLHttpRequest AJAX

69 Przykład utworzenia nowego obiektu XMLHttpRequest. plik: xmlhttp.js

70 Wysyłanie żądania GET AJAX

71 Wysyłanie żądania GET

72 var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php"); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert("Wczytane dane: " + XMLHttp.responseText); } Wysyłanie żądania GET

73 Stany obiektu XMLHttpRequest 0 – nie zainicjowano 1 – wczytywanie 2 – wczytanie 3 – oczekiwanie 4 – zakończenie

74 AJAX Wysyłanie żądania POST

75 XMLHttp.setRequestHeader("Content-type", "application/x-www-form- urlencoded"); XMLHttp.send("zmienna1=Technologia&zmienna2=AJAX"); W przeciwieństwie do metody GET, metoda POST nie wysyła parametrów w adresie, lecz w parametrach metody send().

76 Wysyłanie żądania POST

77 AJAX Żądania synchroniczne

78 XMLHttp.open("GET", "plik.php", false); Trzeci parametry metody open przyjmuje wartość false. Bez podania parametru trzeciego, domyślnie jest true – czyli żądanie asynchroniczne. Wywołanie synchroniczne zatrzymuje całkowicie wykonywanie skryptu. Jeżeli łącze jest wolne lub serwer jest przeciążony strona będzie się zacinać.

79 wczytywanie danych... window.onload = function() { var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php", false); XMLHttp.send(null); document.getElementById("tresc").innerHTML = XMLHttp.responseText; } Żądania synchroniczne

80 AJAX Przerwanie żądania HTTP

81 XMLHttp.abort(); Sens przerwania pobierania danych ma miejsce wtedy, gdy wartość parametru readyState jest różna od 4 i od 0. W przeciwnym wypadku nie ma czego przerywać.

82 var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "czekaj.php?" + Math.random()); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); window.setTimeout("timeout();", 5000); function handlerFunction() { if (XMLHttp.readyState == 4) { window.alert("Wczytane dane: " + XMLHttp.responseText); } function timeout() { if (XMLHttp.readyState != 4 && XMLHttp.readyState != 0) { XMLHttp.onreadystatechange = function() { }; XMLHttp.abort(); window.alert("Anulowano pobieranie danych"); } Przerwanie żądania HTTP

83 AJAX Pobranie nagłówków HTTP

84 Pobranie nagłówka HTTP var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php"); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var servertype = XMLHttp.getResponseHeader("Server"); window.alert("Serwer WWW: " + servertype); }

85 Pobranie nagłówków HTTP var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "plik.php", false); XMLHttp.onreadystatechange = handlerFunction; XMLHttp.send(null); function handlerFunction() { if (XMLHttp.readyState == 4) { var serverinfo = XMLHttp.getAllResponseHeaders(); document.write(serverinfo); }

86 AJAX Sprawdzenie istnienia pliku na serwerze – zmienna status.

87 XMLHttp.status wczytywanie danych... window.onload = function() { var XMLHttp = getXMLHttp(); XMLHttp.open("GET", "xplik.php", false); XMLHttp.send(null); tresc = XMLHttp.responseText; if (XMLHttp.status == 404) { tresc = " brak pliku! "; } document.getElementById("tresc").innerHTML = tresc; }

88 AJAX Wybrane kody odpowiedzi HTTP

89 Wybrane kody odpowiedzi HTTP. Kody informacyjne 110 – Connection Timed Out. Przekroczono czas połączenia. Serwer zbyt długo nie odpowiada. 111 – Connection refused. Serwer odrzucił połączenie Kody powodzenia 200 – OK. Zawartość żądanego dokumentu (najczęściej zwracany nagłówek odpowiedzi w komunikacji WWW Internetu)

90 Wybrane kody odpowiedzi HTTP. Kody przekierowania 400 – Bad Request. Nieprawidłowe zapytanie – żądanie nie może być obsłużone przez serwer z powodu błędnej składni zapytania 403 – Forbidden. Zabroniony – serwer zrozumiał zapytanie lecz konfiguracja bezpieczeństwa zabrania mu zwrócić żądany zasób 404 – Not Found. Nie znaleziono – serwer nie odnalazł zasobu według podanego URL ani niczego co by wskazywało na istnienie takiego zasobu w przeszłości 414 – Request-URI Too Long. Adres URI zapytania zbyt długi – długość zażądanego URI jest większa niż maksymalna oczekiwana przez serwer 500 – Internal Server Error. Wewnętrzny błąd serwera – serwer napotkał niespodziewane trudności, które uniemożliwiły zrealizowanie żądania

91 C. D. N.