Skip to content

Komunikacja asynchroniczna (AJAX / fetch)

This content is not available in your language yet.

Requesty bez przeładowania strony

W klasycznych aplikacjach webowych każda interakcja wymaga przeładowania całej strony. To wolne i niewygodne. Komunikacja asynchroniczna (AJAX, fetch) pozwala wysyłać requesty do serwera i aktualizować tylko część strony - bez przeładowania. Użytkownik widzi wyniki natychmiast, aplikacja działa płynnie jak program desktopowy. W tej prezentacji wyjaśnisz ideę asynchroniczności, pokażesz jak używać fetch API, jak obsługiwać błędy i gdzie to ma sens w realnych projektach.

  1. Co to jest komunikacja asynchroniczna? - Definicja w kontekście UI/UX
  2. Jak to działa? - Mechanizm fetch/AJAX: request → response → aktualizacja DOM
  3. Kiedy używać? - Wyszukiwarka, dynamiczne listy, walidacja, autozapis
  4. Na co uważać? - Obsługa błędów, CORS, status codes
  5. Jak robić dobrze? - Best practices: loading state, error handling, UX
  1. Synchronicznie vs Asynchronicznie

    • Synchronicznie: kliknij → czekaj na przeładowanie → zobacz wynik
    • Asynchronicznie: kliknij → aplikacja działa dalej → wynik pojawia się w tle
    • Analogia: telefon (synchroniczny) vs SMS (asynchroniczny)
  2. Fetch API - podstawy

    • fetch(url) - wysyła request GET
    • fetch(url, {method: 'POST', body: ...}) - wysyła POST
    • Zwraca Promise - trzeba użyć .then() lub async/await
    • Odpowiedź trzeba przetworzyć: response.json()
  3. Request i Response

    • Request: metoda (GET/POST), URL, nagłówki, body
    • Response: status code (200, 404, 500), nagłówki, body (JSON)
    • Sprawdzenie czy request się udał: response.ok
  4. Obsługa błędów

    • Sieć: try/catch lub .catch()
    • HTTP: sprawdzenie response.status
    • UI: pokazanie komunikatu użytkownikowi
  5. Typowe zastosowania

    • Dynamiczne wyszukiwanie (search as you type)
    • Odświeżanie listy bez przeładowania
    • Walidacja dostępności (np. czy username jest wolny)
    • Autozapis formularza

Schemat przepływu

Strona → fetch() → Endpoint PHP → JSON response → Aktualizacja DOM

Przykład kodu fetch

8-12 linii kodu: fetch z obsługą błędów i aktualizacją UI

Zawartość:

  • Wyjaśnij ideę fetch/AJAX - czym różni się od klasycznego formularza
  • Pokaż 1 schemat: strona → fetch → serwer → JSON → DOM
  • Pokaż 1 krótki przykład fetch (GET) + parsowanie JSON

Forma: 10 slajdów, 10 minut prezentacji

Ocena: 3.0
  1. Slajd tytułowy - Tytuł, autorzy, data
  2. Agenda - Plan prezentacji
  3. Problem - Dlaczego przeładowanie strony jest złe dla UX?
  4. Synchronicznie vs Asynchronicznie - Definicje i porównanie
  5. Fetch API - podstawy - Składnia, Promise
  6. Schemat przepływu - Strona → fetch → PHP → JSON → DOM
  7. Przykład kodu fetch - GET z parsowaniem JSON
  8. Obsługa błędów - try/catch, response.ok
  9. Endpoint PHP - Minimalny przykład zwracający JSON
  10. Zastosowania - Wyszukiwarka, lista, autozapis
  11. Status codes - 200, 404, 500 - co znaczą
  12. Podsumowanie i źródła

Użytkownik wpisuje w pole szukania “Jan”. Po każdej literce (z debounce 300ms) fetch wysyła request:

GET /api/search?q=J
GET /api/search?q=Ja
GET /api/search?q=Jan

Wyniki pojawiają się na bieżąco, bez przeładowania strony. Użytkownik widzi podpowiedzi w czasie rzeczywistym.

Przy rejestracji użytkownik wpisuje “jan_kowalski”. Fetch wysyła request do /api/check-username?name=jan_kowalski. Serwer zwraca {available: false}. UI pokazuje komunikat “Ta nazwa jest zajęta” jeszcze przed wysłaniem formularza.

Użytkownik klika “Dodaj zadanie”. Fetch wysyła POST z danymi zadania. Serwer zapisuje i zwraca nowe zadanie z ID. JavaScript dodaje element do listy na stronie. Nie ma przeładowania - lista aktualizuje się dynamicznie.

Przypadek: Lista zadań z AJAX

Aplikacja TODO z pełną obsługą AJAX:

Dodawanie:

  1. Użytkownik wpisuje zadanie, klika “Dodaj”
  2. Button zmienia się na “Dodawanie…” (disabled)
  3. Fetch POST wysyła dane do /api/tasks
  4. Serwer zwraca {id: 123, title: "Nowe zadanie", status: "pending"}
  5. JavaScript dodaje nowy element do listy
  6. Button wraca do stanu normalnego

Obsługa błędów:

  • Sieć nie działa → “Sprawdź połączenie internetowe”
  • Serwer zwraca 500 → “Błąd serwera, spróbuj później”
  • Serwer zwraca 400 → “Nieprawidłowe dane: [szczegóły]”

UX:

  • Loading spinner podczas requestu
  • Optymistyczne UI (element dodany od razu, usunięty przy błędzie)
  • Komunikaty sukcesu/błędu

Request/Response

Jeden slajd: “Request wysyła dane → Response zwraca wynik + status code”

Krótki kod

Kod fetch niech ma 8-12 linii. Duże bloki kodu zniechęcają.

Obsługa błędów

Koniecznie pokaż, że trzeba obsłużyć błąd. To częsty błąd początkujących.

Demo na żywo

Jeśli możesz - pokaż działający fetch w konsoli DevTools. Robi wrażenie.

Prezentacja to umiejętność zawodowa!

Komunikacja asynchroniczna to podstawa nowoczesnych aplikacji webowych. Bez niej nie ma dynamicznych interfejsów, wyszukiwarek real-time ani aplikacji SPA.

Wykorzystajcie lekcje - przygotujcie działający przykład fetch i przećwiczcie jego wyjaśnianie!

Współpraca to klucz - podzielcie się: jedna osoba zajmuje się frontendem (fetch, DOM), druga backendem (endpoint PHP, JSON).

Pamiętajcie: Fetch bez obsługi błędów to jak samochód bez hamulców. Zawsze obsługuj błędy!