Rozdział 22 · Tworzenie stron internetowych z Python

JavaScript: programowanie w przeglądarce

Język programowania odpowiedzialny za zachowanie strony w przeglądarce: reakcję na działania użytkownika i zmiany w treści.

JavaScript (JS) — język programowania, szeroko stosowany w web-developmencie. Rdzeń języka jest standaryzowany przez specyfikację ECMAScript (ECMA-262). W przeglądarce JavaScript realizuje logikę programową strony: obsługuje zdarzenia, pracuje z DOM, zmienia zawartość strony i może wysyłać zapytania sieciowe.

JavaScript działa nie tylko w przeglądarce
JavaScript nie jest używany tylko w przeglądarkach. Działa także w środowiskach serwerowych i innych środowiskach uruchomieniowych, takich jak Node.js. Dlatego JavaScript nie jest tylko „językiem dla przeglądarki”

Główne właściwości JavaScript

Jaki język to JavaScript
Pisanie i pamięć
Dynamiczne typowanie
Automatyczne zarządzanie pamięcią (garbage collector)
Model obiektowy
Model prototypowy obiektów
Funkcje — wartości pierwszorzędne
Style programowania
Styl Imperatywny
Styl obiektowy
Styl funkcjonalny
ECMAScript, DOM i Web API to nie to samo
ECMAScript to standard opisujący sam język: składnię, typy, operatory, funkcje. DOM (Document Object Model) i funkcje takie jak fetch()nie są zawarte w ECMAScript są oddzielnymi interfejsami programistycznymi (Web API), które przeglądarka udostępnia kodowi JavaScript oprócz samego języka.

JavaScript dodaje stronie zachowanie: reakcja na kliknięcia, zmiana zawartości bez przeładowania strony, sprawdzanie formularza przed wysłaniem. JavaScript nie jest potrzebny na każdej stronie: prosty artykuł lub dokument dobrze działają na jednym HTML (plus CSS do formatowania) — przeglądarka wyświetla taką stronę bez ani jednej linijki JavaScript. JavaScript potrzebny jest właśnie tam, gdzie strona musi reagować na działania użytkownika bez nowego żądania do serwera.

DOM jest widokiem strony, z którym pracuje JavaScript

Gdy przeglądarka analizuje HTML, tworzy drzewo obiektów w pamięci z tagów — DOM (Document Object Model). JavaScript nie edytuje tekstu źródłowego pliku HTML- — znajduje pożądany węzeł w tym drzewie i go zmienia:

povedenie.html
<button id="knopka">Нажми меня</button>
<p id="tekst">Пока ничего не произошло.</p>

<script>
  const knopka = document.getElementById("knopka");
  const tekst = document.getElementById("tekst");

  knopka.addEventListener("click", function () {
    tekst.textContent = "Кнопку нажали!";
  });
</script>
Strona z przyciskiem "Click me" i tekstem "Nothing happened yet." przed kliknięciem
Przed kliknięciem: Opiekun jest podpisany, ale zdarzenie jeszcze nie nastąpiło.
Ta sama strona zaraz po kliknięciu przycisku: tekst zmienił się na „Przycisk naciśnięty!”
Po kliknięciu: ta sama strona, bez przeładowania — JavaScript po prostu zastąpił zawartość węzła #tekst.

addEventListener("click", ...) podpisuje funkcję na wydarzenie — kliknij przycisk. Jest wiele wydarzeń: "click", "submit" (złożenie formularza), "input" (wprowadzanie tekstu) i inne – kod jest wykonywany tylko wtedy, gdy zdarzenie jest ważne wydarzyło się.

Konstrukcje znane w innej składni
Zarówno Python, jak i JavaScript mają zmienne, funkcje, warunki i pętle. Jednak ich systemy typów, modele obiektów i czasy uruchomieniowe znacznie się różnią: na przykład JavaScript używa prototypowego modelu obiektowego i zawijanych nawiasów zamiast wcięcia. Jeśli rozumiesz Python, opanowanie podstaw JavaScript będzie znacznie łatwiejsze niż zaczynanie od zera.

Weryfikacja formularza bezpośrednio w przeglądarce

JavaScript może sprawdzić pole formularza przed wysłaniem — i od razu wyświetlić podpowiedź bez Czekam na odpowiedź serwera:

validaciya.js
forma.addEventListener("submit", function (event) {
  if (pole.value.trim() === "") {
    event.preventDefault();
    oshibka.textContent = "Поле не должно быть пустым";
  }
});

event.preventDefault() powstrzymuje regularne wysyłanie formularzy — strona nie zostanie ponownie załadowana, dopóki błąd nie zostanie naprawiony. Nadal ten sam sprawdzenie Musi być powtarzane na serwerze (sekcja 22.31): użytkownik może wysyłać Żądanie bez przeglądarki, omijając wszelkie JavaScript.

fetch() — żądanie do serwera bez ponownego ładowania strony

Funkcja fetch() wysyła zapytanie HTTP- z JavaScript i otrzymuje odpowiedź, nie przeładowując całej strony:

fetch.js
fetch("/api/tasks")
  .then(function (response) { return response.json(); })
  .then(function (data) { console.log(data); });

Co to jest /api/tasks i co dokładnie odpowiada na takie żądanie — Więcej informacji można znaleźć w sekcji 22.16.

Trzy języki razem — HTML, CSS JavaScript — tworzą właśnie „frontend”

Oficjalna dokumentacja: MDN — JavaScript, ECMA-262 (ECMAScript).