Laboratorium 11: javascript
JavaScript i jQuery
Podstawowe cechy
- Język programowania stosowany do opisywania dynamicznych elementów stron WWW.
- Interpretowany
- Obiektowy (prototypy)
- Skryptowy
- Funkcje są „obywatelami pierwszej klasy”
- Dynamiczny
- Słabo typowany
Hello World
- Otwórz jakąś przeglądarkę
- Wpisz w pasku adresu:
javascript:alert(”Hello, World!”);
Hello World w pliku
- Sposób 1:
<script type="text/javascript" src="hello.js"></script>
- W hello.js:
- Sposób 2:
<script type="text/javascript">
alert(”Hello, World!”);
</script>
Zmienne
- Słabe typowanie
- Deklarujemy następująco:
- Można zainicjalizować:
- Przypisania:
Prymitywy
- Boolean
var foo = true;
var bar = false;
- Numeric
var dwa = 2;
var trzyipol = 3.5;
- String
Tablice
- Tworzenie:
var fib = new Array(0, 1, 1, 2, 3);
var fib = [0, 1, 1, 2, 3];
- Można mieszać typy:
Operatory
- Takie same, jak w Javie.
- ===, !== - identyczność, bądź jej brak
- typeof x – string opisujący typ x
- o instanceof c - sprawdza, czy obiekt o został stworzony przez konstruktor c
- delete x – usuwa obiekt
- new cl – nowy obiekt typu cl. cl musi być konstruktorem
Funkcje
- W pliku hello.js:
function helloWorld() {
alert("Hello, World!");
}
- W pasku adresu:
Ulubiony przykład
function fib(n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fib(n-1) + fib(n-2);
}
}
Lambda abstrakcja
var twice = function(n) {
return 2 * n;
}
Obiekty
- Są tworzone za pomocą konstruktorów:
function Osoba(imie) {
this.imie = imie;
}
var Jan = new Osoba(”Jan”);
- Ich pola są domyślnie inicjalizowane przez wartości określone w prototypach
Osoba.prototype.nazwisko = ”Kowalski”;
Jan = new Osoba(”Jan”);
//teraz Jan.nazwisko == ”Kowalski”
- Można to wykorzystać do dziedziczenia.
- Inna notacja pozwalająca tworzyć obiekty – literały obiektów:
Jan = { 'imię': 'Jan', 'nazwisko': 'Kowalski' }
Obsługa zdarzeń (Event handling)
- Specjalne atrybuty zaczynające się na on:
var helloWorld = function(evt) {
alert("Hello, World!");
}
document.onclick = helloWorld;
- Bardzo użyteczny jest window.onload, który jest wywoływany po załadowaniu dokumentu.
DHTML
- Dynamic HTML
- Drzewo DOM (Dynamic Object Model) – umożliwia dowolną modyfikację całego dokumentu HTML.
Znajdowanie elementów
- Służą do tego metody obiektu document:
document.getElementById(”id”);
document.getElementsByTagname(”p”);
Dodawanie elementów
- Do tworzenia elementów służy metoda obiektu document:
var div = document.createElement(”div”);
div.id = ”someDiv”;
div.class = ”someClass”;
- Można teraz dodać nowy element do dokumentu:
document.documentElement.appendChild(div);
Modyfikacja elementów
- Można zmieniać atrybuty HTML za pomocą atrybutów javascriptowych obiektów:
document.getElementById(”someDiv”).class = ”otherClass”;
- Atrybut style modyfikuje styl css
document.getElementById('someDiv').style.color = 'red';
Usuwanie elementów
- Metoda removeChild obiektu dokument:
div = document.getElementById(”someDiv”);
document.removeChild(div);
jQuery
- Biblioteka JavaScript, która wszystko ułatwia.
- Przenośność między przeglądarkami.
- Łatwa nawigacja po drzewie DOM.
- Łatwa obsługa eventów.
- Łatwa dynamiczna zmiana stylów CSS.
- Łatwy AJAX
- Efekty i animacje.
- Narzędzia ułatwiające pracę.
- Dużo pluginów.
Pierwszy przykład
- Dodaj między
<body></body>:
<a href="http://jquery.com/">jQuery</a>
- Dodaj między
<script></script>:
$(document).ready(function() {
$(”a”).click(function(event) {
alert(”Hello, jQuery!”);
event.preventDefault();
});
});
jQuery i DOM
- Selektory umożliwiają łatwe wybieranie elementów z drzewa DOM:
$(".someClass").css("border", "red");
$("#someId").html(”Modified with jQuery”);
- Różne rodzaje selektorów:
$(”#someId > p”) - wszystkie elementy typu p, które są dziećmi elementu o Id someId
$("p[@class]") – wszystkie elementy typu p z atrybutem class
$("p.foo[a]") – wszystkie elementy typu p, klasy foo, które zawierają element typu a.
jQuery i eventy
$(”p.shy”).click(function() {
$(this).hide(”slow”);
});
- Wszystkie paragrafy klasy shy schowają się po kliknięciu.
jQuery i AJAX
JavaScript
Czym jest JavaScript
- Językiem stworzonym przez Netscape w 1995 roku
- Interpretowanym językiem skryptowym działającym po stronie klienta
- i obiektowym
- i wspierającym programowanie funkcyjne (domknięcia i funkcje wyższego rzędu)
Do czego można stosować JS
- Dynamiczne zmienianie wyglądu i zawartości strony w odpowiedzi na akcje użytkownika
- Kontrolowanie ramek, apletów i pluginów
- Otwieranie nowych okien, pobieranie informacji o przeglądarce, tworzenie plików cookies
- Przetwarzanie żądań przed ich wysłaniem do serwera WWW
Do czego nie można stosować JS
- Uruchamiania zewnętrznych aplikacji
- Odczytywania i zapisywania plików na dysku użytkownika
- Wysyłania sekretnych e-maili ze strony
- Zmiany parametrów przeglądarki, przycisków nawigacyjnych
Elementy z których składa się JS
- Jądro(EMAScript) - definiuje składnie, typy, wyrażenia...
- DOM - programistyczny interfejs do obsługi html i xml
- BOM - programistyczny interfejs do obsługi przeglądarki
Składnia
- Wszystko jest case-sensitive
- Zmienne są słabo typowaIne
- Nie trzeba stawiać średników na końcu linii
- Komentarze jak w Javie (/* */ i //)
- Bloki kodu są zawarte w { }
Zmienne
- Definiowanie za pomocą słowa kluczowego var
- Można im zmieniać typy
- Nazwy zaczynają się od litery, $ albo_
Instrukcje
- if then else, switch, for ..., while..., do cos while... jak w C++
- for (zmienna in object) cos
Przykład 1
<head>
<script type="text/javascript">
function notEmpty() {
var myTextField = document.getElementById('myText');
if(myTextField.value != " ")
alert("You entered: "+ myTextField.value)
else
alert("Would you please enter some text?")
} </script>
</head>
<body>
<script type="text/javascript">
document.write("Wpisz tekst:");
</script>
<input type='text' id='myText' /> <input type='button'
onclick='notEmpty()' value='Form Checker' /> </body>
Przykład 2 - suma
function sum(numbers) {
var total = 0
forEach(numbers, function (number) {
total += number
})
return total
}
alert(sum([1, 10, 100]));
Klasa Object
Właściwości:
- constructor - referencja do funkcji która stworzyła obiekt
- prototype - referencja do prototypu obiektu
Metody:
- hasOwnProperty(property) - czy obiekt ma własność
- isPrototypeOf(object) - czy jest prototypem
- toString() - konwersja na String
- propertylsEnumerable(property) czy właściwości można użyć w for
Przykład 3 - Obiekt
var cat = {colour: "grey", name: "Spot", size: 46};
cat.speak = function(line) {
print("The cat says '", line, " " ');
}
cat.size =
yellow";
alert(cat.size);
delete cat.size;
alert(cat.size);
alert(cat.speak("Cześć"));
alert(cat);
Przykład 4 - Obiekt
function Rabbit(adjecitve) {
this.adjective = adjective;
this.speak = function(line) {
print("The ", this.adjective, " rabbit says '", line, " " ');
};
}
var = new Rabbit("krolik");
function makeRabbit(adjective) {
return {
adjective: adjective,
speak: function(line) { tresc funkcji }
};
}
var blackRabbit = makeRabbit("black");
Klasa Array
- var a = new Array(100), b = new Array(), c = new Array("a", "b", "c")
- a.length - długość tablicy
- sort() - sortuje toString
- slice(), concat(), reverse()
- push() i pop() robia z tablicy stos
inne klasy
- Function
- Date
- Global
- Math
- RegExp
Przykład 5
function negate(func) {
return function(x) {
return !func(x)
};
}
var isOdd = negate(isEven);
Czym jest jQuery
Przykłady
$("#someId").html("<b>So Bold!</b>");
$(document).ready(function() {
$("a").click(function(event) {
alert("Thanks for visiting');
});
}
$(document).ready(function() {
$("#orderedlist li:last").hover(function() {
$(this).addClass("green");
},function(){
$(this).removeClass("blue");
});
});
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
$.post("test.php", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});
$.get("test.php", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});
Dostęp do baz danych ORACLE za pomocą PHP
Moduły OCI8 i ORA
- Do dyspozycji mamy dwa moduły:
- - Oracle Call-Interface functions (OCI8)
- - Oracle 7 functions (ORA)
- OCI8 – zoptymalizowany, duże możliwości, na nim się skupimy
- ORA – przestarzały, nowsze wersje PHP go nie zawierają – nie używać.
Połączenie z Bazą danych
- oci_connect(”login”, ”hasło”, ”baza”)
- - zwraca identyfikator połączenia lub false w przypadku niepowodzenia
- oci_new_connect
- - jeśli chcemy kolejnego połączenia z tą samą bazą(dostaniemy nowy identyfikator)
- oci_close(połączenie)
Obsługa błędów
- oci_error()
- - zwraca tablicę opisującą błąd lub false, jeśli żadnego nie zarejestrowano.
- Pola w tablicy:
- - code
- - message
- - offset
- - sqltext
Zapytania PL/SQL:
- oci_parse(połączenie, polecenie sql/plsql)
- - zwraca id deklaracji lub false w przypadku błędu
- - nie sprawdza poprawności zapytania
- - SQL – nie stawiamy średnika na końcu polecenia
- - PL/SQL – stawiamy średnik
- oci_free_statement(deklaracja)
- - zwalnia zasoby
Dostęp do zmiennych:
- oci_bind_by_name(deklaracja, ”:nazwa”, zmiennaPHP)
- - zwraca true/false
- - wygodne i bezpieczne
- oci_bind_by_name($s, ":bind1", $var1);
Wykonywanie deklaracji:
- oci_execute(deklaracja, opcja)
- - zwraca true/false
- Opcje:
- - OCI_COMMIT_ON_SUCCES
- - OCI_NO_AUTO_COMMIT
Zatwierdzanie zmian:
- Jeśli zamkniemy połączenie to przywracana jest wersja bazy sprzed wprowadzenia zmian
- oci_commit(połączenie)
- - zwraca true/false
- oci_rollback(połączenie)
- - cofa niezatwierdzone zmiany
Przetwarzanie wyników:
- oci_fetch(deklaracja)
- - przechwytuje następny wiersz
- - zwraca true dopóki jest jeszcze coś do przeczytania
- oci_result(deklaracja, pole)
- - zwraca wartość pola w aktualnej linii
Przetwarzanie wyników:
- oci_fetch_all(deklaracja, zmienna_php, ile_pomijamy, ile_czytamy, flagi)
- - zwraca ilość wierszy lub false w przypadku niepowodzenia
- Flagi:
- - OCI_FETCHSTATEMENT_BY_ROW
- - OCI_FETCHSTATEMENT_BY_COLUMN
- - OCI_NUM
- - OCI_ASSOC
Przykładowe użycie:
Przykładowe użycie
- Wypisywanie zawartości:
$r = oci_parse($c, "SELECT * FROM wypozyczenia");
oci_execute($r);
$rowCount = oci_fetch_all($r, $all, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_ASSOC);
echo "Zawartosc tabeli WYPOZYCZENIA: <br>";
echo "<pre>".print_r($all, true)."</pre>";
Przykładowe użycie:
$var2 = "Scott";
$tab = array(2,8,19,32);
$s = oci_parse($c, "insert into tab1 values (:bind1, :bind2)");
oci_bind_by_name($s, ":bind1", $var1, 20);
oci_bind_by_name($s, ":bind2", $var2);
foreach($tab as $var1){
oci_execute($s);
}
Przykładowe użycie:
- Przetwarzanie wierszy jeden po drugim:
$s = oci_parse($c, "select * from tab1");
oci_execute($s);
while(oci_fetch($s)){
echo "COL1 = " . oci_result($s, "COL1") .
", COL2 = " . oci_result($s, "COL2") . "<br>";
}
Przykładowe użycie:
- PL/SQL:
$s = oci_parse($c, "create or replace procedure powieksz(p1 in number, p2 out number) as
begin p2 := p1 + 1; end;");
oci_execute($s);
$p1 = 233;
$s = oci_parse($c, "begin powieksz(:x1, :x2); end;");
oci_bind_by_name($s, ":x1", $p1);
oci_bind_by_name($s, ":x2", $p2, 40);
oci_execute($s);
echo $p1 . " + 1 = " . $p2; // 233 + 1 = 234
Dodatki:
Przydatne linki
- Firebug -- przydatne rozszerzenie do przegladarki
- szablony stron: csszengarden.com freecsstemplates.org