Biblioteki i frameworki JavaScriptu: po co są, jak dołączyć jQuery z sieci CDN, selektory i metody jQuery obok tego samego kodu w czystym JavaScripcie, czym różnią się React i Angular, format JSON z metodami parse i stringify oraz technika AJAX i funkcja fetch. Lekcja 11.8 kursu INF.03.
Biblioteka to gotowy zbiór funkcji napisanych przez kogoś innego, który dołącza się do strony jednym znacznikiem <script> i wywołuje we własnym kodzie zamiast pisać to samo od zera. Najczęściej wracającą w pytaniach biblioteką JavaScriptu jest jQuery, obok niej stoją nazwy React i Angular, a dane między stroną a serwerem jeżdżą w formacie JSON. W części pisemnej pytania brzmią „która z wymienionych bibliotek należy do języka JavaScript", „co robi przedstawiony zapis ze znakiem dolara", „który zapis jest poprawnym formatem JSON" i „co oznacza skrót AJAX". W zadaniu praktycznym biblioteki i format JSON stoją wprost na liście innych zadań, a arkusz każe wtedy dołączyć plik biblioteki obok własnego skryptu.
Biblioteka, framework i sieć CDN
Biblioteka to zestaw gotowych funkcji, które wywołuje twój kod: to ty decydujesz, kiedy i po co po nie sięgnąć. Framework (SZKIELET) odwraca tę zależność, bo jest gotową konstrukcją aplikacji, w którą wstawia się własne kawałki kodu, a o momencie ich wywołania decyduje sam framework. Stąd najkrótsza różnica: bibliotekę się woła, do frameworka się wpisuje.
Plik biblioteki pobiera się zwykle z sieci CDN (Content Delivery Network, SIEĆ DOSTARCZANIA TREŚCI), czyli z publicznego serwera trzymającego kopie popularnych bibliotek. Drugą drogą jest pobranie pliku raz i położenie go obok strony, i tak właśnie trzeba zrobić na stanowisku egzaminacyjnym, gdzie internetu nie ma.
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="skrypt.js"></script>
Kolejność jest obowiązkowa: biblioteka stoi PRZED skryptem, który z niej korzysta, inaczej przeglądarka zgłasza błąd $ is not defined. Oba znaczniki idą przed zamykającym </body>. Człon min w nazwie pliku oznacza wersję zminifikowaną, czyli pozbawioną spacji, wcięć i komentarzy: waży mniej i pobiera się szybciej, ale człowiek jej nie czyta.
jQuery: znak dolara i selektor CSS
jQuery to biblioteka JavaScriptu, która skraca operacje na drzewie dokumentu do wywołań jednej funkcji o nazwie $. Funkcja przyjmuje selektor CSS, ten sam co w arkuszu stylów z lekcji o selektorach CSS, i oddaje kolekcję wszystkich pasujących elementów. ›
$("#cena") bierze element o identyfikatorze cena, bo krzyżyk oznacza identyfikator.
›
$(".produkt") bierze wszystkie elementy z klasą produkt, bo kropka oznacza klasę.
›
$("p") bierze wszystkie akapity, bo sama nazwa oznacza znacznik.
Wobec document.getElementById z lekcji o modelu DOM różnica siedzi w liczbie mnogiej: jedno wywołanie jQuery działa na WSZYSTKICH pasujących elementach naraz, więc $(".produkt").hide() ukrywa cały zestaw bez pętli. Kod sięgający po elementy strony musi zaczekać, aż przeglądarka zbuduje drzewo dokumentu. Robi to $(document).ready (GOTOWY), które przyjmuje funkcję do wykonania po zbudowaniu strony; krótszy zapis tego samego to $(function () { ... }).
$(document).ready(function () {
$("#tytul").text("Promocja dnia");
});
Wynik: po wczytaniu strony nagłówek o identyfikatorze tytul ma treść Promocja dnia. Bez tego opakowania skrypt umieszczony w sekcji <head> nie znalazłby elementu, bo jego jeszcze by nie było.
Metody jQuery i to samo w czystym JavaScripcie
Metoda jQuery to funkcja wywoływana na wybranej kolekcji, po kropce za selektorem. Bez argumentu metoda CZYTA, z argumentem ZAPISUJE: $("#ilosc").val() oddaje wpisaną wartość, a $("#ilosc").val("1") ją ustawia. Ta sama zasada obowiązuje w .text() i .html().
Zapis jQuery
Co robi
To samo w czystym JavaScripcie
$("#a").text("Nowy")
wstawia tekst, znaczniki traktuje jak zwykłe znaki
el.textContent = "Nowy"
$("#a").html("<b>Nowy</b>")
wstawia kod HTML, znaczniki zaczynają działać
el.innerHTML = "<b>Nowy</b>"
$("#a").val()
czyta wartość pola formularza
el.value
$("#a").css("color", "red")
ustawia jedną właściwość stylu
el.style.color = "red"
$("#a").hide()
ukrywa element
el.style.display = "none"
$("#a").show()
pokazuje ukryty element
el.style.display = "block"
$("#a").click(f)
podpina funkcję f pod kliknięcie
el.addEventListener("click", f)
Zadanie z arkusza brzmi zwykle: policz wartość zamówienia po kliknięciu przycisku i pokaż ją na stronie. W jQuery mieści się w trzech wierszach.
$("#licz").click(function () {
const ilosc = Number($("#ilosc").val());
$("#suma").text(ilosc * 49).css("color", "green");
});
Wynik: kliknięcie przycisku o identyfikatorze licz wpisuje do elementu suma iloczyn liczby z pola ilosc i ceny 49, zielonymi znakami. Dwie metody w jednym wierszu to łańcuch: każda z nich oddaje tę samą kolekcję, więc następna ma na czym pracować.
document.getElementById("licz").addEventListener("click", function () {
const ilosc = Number(document.getElementById("ilosc").value);
const suma = document.getElementById("suma");
suma.textContent = ilosc * 49;
suma.style.color = "green";
});
Wynik jest identyczny, a wierszy jest dwa razy więcej. Cała oszczędność jQuery bierze się stąd, że $ łączy wyszukanie elementów z operacją na nich, a metody wracają do tej samej kolekcji.
Pułapka: .val() i .value oddają NAPIS, więc + skleja zamiast dodawać: "2" + 3 daje 23. Liczbę robi z napisu Number, parseInt albo parseFloat.
React i Angular
React to biblioteka JavaScriptu do budowania interfejsu z komponentów, czyli samodzielnych kawałków strony trzymających razem swój wygląd i swoje zachowanie, a Angular to framework, więc narzuca całą strukturę aplikacji, własny sposób pisania szablonów i własny zestaw narzędzi. Trzecią nazwą z tej półki jest Vue. Na egzaminie nie pisze się w nich kodu i wystarczy rozpoznać nazwę: jQuery, React, Angular i Vue należą do JavaScriptu, Symfony i Laravel do PHP, Bootstrap to biblioteka gotowych stylów CSS, a Node.js to środowisko uruchamiające JavaScript poza przeglądarką, po stronie serwera.
JSON: format wymiany danych
JSON (JavaScript Object Notation, NOTACJA OBIEKTOWA JAVASCRIPTU) to tekstowy format zapisu danych, w którym jeden program przekazuje dane drugiemu: strona serwerowi, serwer stronie, jeden plik drugiemu. Zapis wzięto ze składni obiektu JavaScriptu, ale sam JSON jest zwykłym tekstem, a nie kodem do wykonania.
Obiekt stoi w nawiasach klamrowych i składa się z par klucz i wartość rozdzielonych dwukropkiem, tablica stoi w nawiasach kwadratowych i trzyma listę wartości. Kolejne elementy rozdziela przecinek, po ostatnim przecinka nie ma. Wartością bywa napis, liczba, wartość logiczna true albo false, pusta wartość null, tablica i kolejny obiekt. Funkcji, dat i komentarzy w JSON nie ma.
{
"nazwa": "Monitor 24",
"cena": 749.99,
"dostepny": true,
"tagi": ["monitor", "promocja"]
}
Od obiektu JavaScriptu z lekcji o tablicach i obiektach różni się trzema szczegółami, na których stoją pytania. Klucz w JSON zawsze siedzi w cudzysłowie podwójnym, w obiekcie JavaScriptu cudzysłów jest niepotrzebny. Napis wolno w JSON objąć wyłącznie cudzysłowem podwójnym, apostrof to błąd. Wartością nie może być funkcja, więc obiekt z metodą do JSON nie przejdzie. Dwie funkcje przekładają jedno na drugie: JSON.parse (ROZBIERZ) zamienia napis w formacie JSON na obiekt JavaScriptu, a JSON.stringify (ZAMIEŃ NA NAPIS) robi z obiektu napis gotowy do wysłania. Ten blok wykona w przeglądarce interpreter JavaScript. const tekst = '{"nazwa": "Mysz", "cena": 59}';
const produkt = JSON.parse(tekst);
console.log(produkt.nazwa + " kosztuje " + produkt.cena);
console.log(JSON.stringify(produkt));
Wynik:
Mysz kosztuje 59
{"nazwa":"Mysz","cena":59}
Po rozebraniu napisu do wartości sięga się kropką, tak jak w każdym obiekcie, czyli produkt.nazwa. Zamiana w drugą stronę usuwa odstępy, więc napis wychodzi krótszy od tego, który wszedł.
AJAX: fragment strony bez przeładowania
AJAX (Asynchronous JavaScript and XML, ASYNCHRONICZNY JAVASCRIPT I XML) to technika pobierania danych z serwera w tle, bez przeładowania całej strony. Skrypt wysyła żądanie, odbiera odpowiedź i podmienia tylko ten fragment dokumentu, który się zmienił: podpowiedzi w wyszukiwarce, licznik koszyka, kolejną porcję komentarzy pod artykułem. Mimo litery X w skrócie dane jadą dziś prawie zawsze w formacie JSON, nie w XML.
fetch (POBIERZ) to wbudowana funkcja przeglądarki, która wysyła takie żądanie pod podany adres.
fetch("produkty.json")
.then(function (odpowiedz) {
return odpowiedz.json();
})
.then(function (dane) {
document.getElementById("nazwa").textContent = dane.nazwa;
});
Wynik: element o identyfikatorze nazwa dostaje wartość klucza nazwa z pliku produkty.json. Odpowiedź przychodzi PÓŹNIEJ niż wykonuje się reszta skryptu, dlatego to, co ma się stać po jej otrzymaniu, siedzi w funkcji przekazanej do .then (POTEM), a nie w kolejnym wierszu pod fetch. Starszym zapisem tej samej techniki jest obiekt XMLHttpRequest, a w jQuery metoda $.ajax; w pytaniach AJAX pojawia się jako nazwa technologii, nie jako kod do napisania.
Na egzaminie
Pytania pisemne o biblioteki mają trzy kształty. Pierwszy to przypisanie nazwy do języka: w pytaniu o framework opracowany dla języka PHP poprawne jest Symfony, a nie Angular ani Spring, bo Angular należy do JavaScriptu, a Spring do Javy. Drugi to odczytanie zapisu z jQuery: $("#dane") wskazuje element o identyfikatorze dane, $(".dane") wszystkie elementy klasy dane, a $("dane") wszystkie znaczniki o nazwie dane. Trzeci to rola technologii na liście: AJAX nie jest językiem programowania, tylko techniką wymiany danych, więc w pytaniu o języki działające po stronie serwera odpada odpowiedź z AJAX, a w pytaniu o technologię, która NIE przetwarza danych użytkownika, odpada CSS, bo formatuje wygląd i nie ma instrukcji.
O format JSON pyta się przez wskazanie poprawnego zapisu: klucz w cudzysłowie podwójnym, brak przecinka po ostatniej parze, brak funkcji i komentarzy, true i false bez cudzysłowu. Pytanie o JSON.parse sprawdza kierunek zamiany, czyli z napisu na obiekt, a JSON.stringify zamienia w drugą stronę.
W zadaniu praktycznym biblioteki i format JSON stoją na liście innych zadań obok walidacji formularza i obsługi zdarzeń myszy. Gdy arkusz wymaga jQuery, plik biblioteki leży na dysku stanowiska, a w kodzie strony idą dwa znaczniki <script> przed </body>: najpierw biblioteka, potem własny plik skrypt.js. Reszta polecenia wygląda tak jak w lekcji o zdarzeniach i formularzach: pobrać wartość pola, sprawdzić ją, wpisać wynik do wskazanego elementu albo zmienić mu styl. W jQuery robią to .val(), instrukcja if oraz .text(), .html() i .css(). Ściąga
<script src="jquery.js"></script>
dołączenie biblioteki, przed własnym skryptem
$("#cena")
element o identyfikatorze cena
$(".produkt")
wszystkie elementy z klasą produkt
$("p")
wszystkie znaczniki <p>
$(document).ready(f)
wykonaj f, gdy drzewo dokumentu jest gotowe
$("#a").text("x")
wstaw tekst, znaczniki jako zwykłe znaki
$("#a").html("<b>x</b>")
wstaw kod HTML
$("#a").val()
odczytaj wartość pola formularza, zawsze jako napis
$("#a").css("color", "red")
ustaw właściwość stylu
$("#a").hide()
ukryj element
$("#a").show()
pokaż ukryty element
$("#a").click(f)
wykonaj f po kliknięciu
{"klucz": "wartosc"}
obiekt JSON, klucz zawsze w cudzysłowie podwójnym
JSON.parse(napis)
z napisu JSON na obiekt JavaScriptu
JSON.stringify(obiekt)
z obiektu JavaScriptu na napis JSON
fetch("dane.json")
żądanie AJAX, odpowiedź przychodzi później
Pobierz ściągę PDF