1. Šta je zapravo AJAX?

Zamislite da koristite Facebook ili Instagram. Kada lajkujete objavu, broj lajkova se promeni, ali se cela stranica ne učitava ponovo. To je AJAX (Asynchronous JavaScript and XML).

Iako u nazivu stoji XML, danas se najčešće koristi JSON format jer je lakši za čitanje i ljudima i računarima. Suština je u asinhronosti: vaš kod šalje zahtev serveru, a dok čeka odgovor, korisnik i dalje može da koristi aplikaciju.

2. Priprema radnog okruženja (VS Code)

Da bi AJAX radio kako treba, stranica bi idealno trebalo da se pokreće preko lokalnog servera (zbog bezbednosnih pravila pretraživača).

  1. Otvori VS Code.

  2. Instaliraj ekstenziju "Live Server" (ako već nisi).

  3. Napravi novi folder za projekat i u njemu fajlove index.html i script.js.


3. Primer kako se koristi jQuery $.ajax() metoda

Najjednostavniji način za rad sa AJAX-om u srednjoj školi je korišćenje jQuery biblioteke. Ona skraćuje desetine linija koda na svega nekoliko.

Struktura funkcije: 

JavaScript
- primer za ilustraciju (ali koji neće raditi jer je link koji je napisan - nepostojeći)
$.ajax({
    url: 'https://api.primer.com/podaci', // Adresa odakle uzimamo podatke
    type: 'GET',                         // Metoda (GET za čitanje, POST za slanje)
    success: function(odgovor) {         // Šta se dešava ako je sve u redu
        console.log(odgovor);
    },
    error: function(greska) {            // Šta ako server ne radi ili je adresa loša
        alert('Došlo je do greške!');
    }
});

Pre nego što krenemo da kucamo kod, neophodno je da „uključimo" jQuery biblioteku na našu stranicu.

Dodajte link za jQuery u head element. (Ako ne znate kako - i odaberite vaš način )

Prvi način je preuzumanje jQuery kompletnog fajla (skripta) sa njihovog sajta, a zatim jQuery fajl linkujete pomoću script taga. JQuery možete da preuzmete ovde.
Npr ako preuzeti fajl postavite u folder "skripte" i zatim otkucate u head elementu kod nalik ovom:

   <script src="skripte/jquery-3.6.3.min.js"></script>

U ovom slučaju 3.6.3 označava trenutnu verziju koja je uključena u taj fajl.

Možda bi bilo zgodno da se ta preuzeta skripta preimenuje u jquery.js i da se postavi u isti folder sa html dokumentom u kojem se koristi. Tada biste koristili:

   <script src="jquery.js"> </script>

Drugi način:  Link direktno ka fajlu na zvaničnom sajtu i to na sledeći način:

    <script src="https://code.jquery.com/jquery-latest.min.js"> </script>

Treći način (i najčešći) je CDN link i mi ćemo na taj način često uključivati jQuery na našu stranicu. na našu stranicu. CDN (Content Delivery Network) nam pruža mogućnost da uključimo određene biblioteke.  Pošto se jQuery hostuje na više servera, na različitim lokacijama i kada se pošalje zahtev serveru (mi šaljemo zahtev za jQuery biblioteku), on će nam je dostaviti sa nama najbližeg servera. U pretraživaču kucate "jQuery Google" ili "jQuery CDN" i dobićete rezultate odakle možete preuzeti link ka skripti. Kako bismo ga uključili na stranicu, taj link ubacite u script tagove u head elementu.

Za većinu aplikacija, zgodno je uključivanje jQuery putem CDN-a, jer korisnici mogu imati u keš memoriji browsera istu verziju jQuery-a sa istog CDN-a, što onda ubrzava učitavanje stranice. Međutim, u offline okruženjima ili aplikacijama gde se izbegava mrežni pristup, lokalni fajl može biti bolja opcija.


5. Vežba: "Vremenska prognoza"  

Zadatak: Napraviti mini aplikaciju koja ispisuje trenutnu temperaturu za Beograd koristeći Open-Meteo API (koji ne zahteva ključ).

Instrukcije za učenike:

  1. Koristiti URL: https://api.open-meteo.com/v1/forecast?latitude=44.80&longitude=20.46&current_weather=true

  2. Proučiti strukturu JSON-a koju API vraća (otvoriti link u pretraživaču).

  3. Ispisati vrednost current_weather.temperature u jedan <div> na stranici.


Rešenje 

JavaScript
// script.js deo za vremensku prognozu
$.ajax({
    url: 'https://api.open-meteo.com/v1/forecast?latitude=44.80&longitude=20.46&current_weather=true',
    type: 'GET',
    success: function(res) {
        let temp = res.current_weather.temperature;
        $('#prognoza').html("Trenutna temperatura u Beogradu je: <b>" + temp + "°C</b>");
    }
});

Česta pitanja i zamke:

  • Šta je JSON? To je format zapisa podataka koji izgleda kao JavaScript objekat (ključ: vrednost). Skoro svi moderni API-ji komuniciraju preko njega.

  • Zašto Live Server? Neki API-ji blokiraju zahteve ako fajl otvoriš direktno iz foldera (file:// protokol). Live Server simulira pravi veb sajt (http://localhost).

  • Konzola je tvoj prijatelj: Ako dugme ne radi, pritisni F12 u pretraživaču i pogledaj tab Console ili Network. Tu ćeš videti tačno koja je greška u pitanju.



 

U nastavku prelazimo sa pasivnog dobijanja podataka na interakciju sa korisnikom.

U ovom delu ćemo nadograditi prethodnu vežbu. Umesto da fiksiramo koordinate za Beograd, dozvolićemo korisniku da unese naziv grada, a mi ćemo pomoću AJAX-a saznati njegovu temperaturu.


Nadogradnja: Dinamička vremenska prognoza

Da bismo ovo postigli, koristićemo dva koraka (dva API poziva):

  1. Geokodiranje: Pretvaramo ime grada (npr. "Novi Sad") u geografsku širinu i dužinu.

  2. Vremenska prognoza: Te koordinate šaljemo Open-Meteo servisu.

1. Izmena HTML-a (index.html)

Dodajemo polje za unos i novo dugme unutar našeg okvira:

HTML
<div id="okvir">
    <h2>Vremenska prognoza</h2>
    <input type="text" id="grad-unos" placeholder="Unesite naziv grada (npr. Paris)">
    <button id="trazi-btn">Pretraži</button>
    
    <div id="rezultat" style="margin-top: 20px;">
        </div>
</div>

2. Izmena JavaScript-a (script.js)

Sada pišemo logiku. Prvo tražimo koordinate grada, a zatim te koordinate prosleđujemo drugom pozivu.

JavaScript
$(document).ready(function() {
    $('#trazi-btn').click(function() {
        let grad = $('#grad-unos').val(); // Uzimamo šta je korisnik napisao
        
        if(grad === "") {
            alert("Molimo unesite naziv grada!");
            return;
        }

        // KORAK 1: Pronalaženje koordinata preko Geocoding API-ja
        $.ajax({
            url: `https://geocoding-api.open-meteo.com/v1/search?name=${grad}&count=1&language=en&format=json`,
            type: 'GET',
            success: function(podaci) {
                if (podaci.results && podaci.results.length > 0) {
                    let lat = podaci.results[0].latitude;
                    let lon = podaci.results[0].longitude;
                    let imeGrada = podaci.results[0].name;

                    // KORAK 2: Pozivamo prognozu koristeći dobijene koordinate
                    pribaviTemperaturu(lat, lon, imeGrada);
                } else {
                    $('#rezultat').html("<p style='color:red;'>Grad nije pronađen.</p>");
                }
            }
        });
    });

    function pribaviTemperaturu(lat, lon, ime) {
        $.ajax({
            url: `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}&current_weather=true`,
            type: 'GET',
            success: function(prognoza) {
                let temp = prognoza.current_weather.temperature;
                $('#rezultat').html(`
                    <h3>${ime}</h3>
                    <p>Trenutna temperatura: <strong>${temp}°C</strong></p>
                `);
            }
        });
    }
});

Šta smo ovde naučili?

  • Template Literals: Koristili smo kosa navodnika (backticks `) i ${promenljiva} unutar URL-a. To nam omogućava da lako ubacimo vrednosti koje je korisnik uneo direktno u link.

  • Ulančavanje (Chaining): Videli smo kako rezultat jednog AJAX poziva (koordinate) služi kao ulaz za drugi AJAX poziv.

  • Validacija: Dodali smo proveru da li je polje prazno i da li je grad uopšte pronađen u bazi.


 (Izazov) 

Pokušajte da u funkciji pribaviTemperaturu dodate još jednu informaciju iz API-ja, na primer brzinu vetra.

(Savet: Pogledati u konzoli objekat prognoza.current_weather, tamo se krije ključ windspeed.)

 

Last modified: Monday, 23 March 2026, 8:31 AM