⊗jsSpAXFt 244 of 294 menu

Fetchin perusteet AJAX:ssa

Katsotaan nyt, kuinka osa sivusta voidaan ladata käyttäen AJAXia. Olkoon sivullamme index.html div-elementti ja painike (tässä näytetään bodyn sisältö):

<div></div> <button>click me</button>

Olkoon meillä myös sivu ajax.html, jolla on kolme kappaletta (ilman sivun tunnisteita, vain kappaleita):

<p>1</p> <p>2</p> <p>3</p>

Tehdään niin, että napin painalluksella sivulla index.html diviin ladataan sivun ajax.html sisältö.

Tätä varten hankitaan ensin viittaukset elementteihimme muuttujiin:

let div = document.querySelector('div'); let button = document.querySelector('button');

Asetetaan painikkeelle klikkauksen käsittelijä:

button.addEventListener('click', function() { // täällä suoritetaan AJAX-pyyntö });

Suoritetaan nyt AJAX-pyyntö. Tätä varten käytetään funktiota fetch, jonka parametrina on sen sivun osoite, jonka sisällön haluamme saada. Määritetään palvelimellamme olevan sivun ajax.html osoite:

button.addEventListener('click', function() { let result = fetch('/ajax.html'); });

fetch palauttaa tuloksenaan promisen. Asia on siinä, että sivun pyytäminen AJAXin kautta - on asynkroninen operaatio, sillä kuluu vähän aikaa, jonka kuluin sivu vastaa meille.

Saadaan promisen tulos:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // palvelimen vastaus on muuttujassa response }); });

Yksinkertaistetaan pois turha muuttuja:

button.addEventListener('click', function() { fetch('/ajax.html').then(function(response) { }); });

Yksinkertaistetaan nuolifunktiota käyttäen:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { }); });

Esitetään luettavammassa muodossa:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { } ); });

Muuttujassa response on melko monimutkainen Response-luokan olio:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { console.log(response); // Response-luokan olio }); });

Opiskelemme tätä oliota syvällisemmin seuraavissa oppitunneissa, mutta toistaiseksi tarvitsemme yksinkertaisinta - saadaksemme pyydetyn sivun tekstin. Tätä varten tässä oliossa on olemassa metodi text. Tämä metodi ei kuitenkaan palauta sivun tekstiä, vaan promisen sen tekstistä:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { console.log(response.text()); // tulostaa Promisen } ); });

Päästäkseen sivun tekstiin, on promis, joka on saatu response.text:stä, käsiteltävä uudelleen:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { return response.text(); } ).then( text => { console.log(text); // sivun teksti } ); });

Niin, saimme vihdoin pyydetyn sivun tekstin ja voimme esimerkiksi kirjoittaa sen diviimme:

button.addEventListener('click', function() { fetch('/ajax.html').then( response => { return response.text(); } ).then( text => { div.innerHTML = text; } ); });

Annettu kolme painiketta ja div. Palvelimella on annettu kolme sivua. Tee niin, että jokainen painike lataa diviin vastaavan sivun.

Olkoon palvelimella viisi sivua. Olkoon ensimmäinen painallus painikkeessa lataa ensimmäinen sivu, toinen painallus - toisen, ja niin edelleen, kunnes sivut loppuvat.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää