⊗jsSpAXFt 244 of 294 menu

Grunnleggende om fetch i AJAX

La oss nå se på hvordan vi kan laste inn en del av en side med AJAX. La det på vår side index.html være plassert en div og en knapp (her vises innholdet i body):

<div></div> <button>klikk meg</button>

La oss også si at vi har en side ajax.html, som inneholder tre avsnitt (uten sidetagger, kun avsnitt):

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

La oss gjøre det slik at ved et klikk på knappen på siden index.html, lastes innholdet fra siden ajax.html inn i diven.

For å gjøre dette, la oss først hente referansene til elementene våre inn i variabler:

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

La oss legge en klikk-håndterer på knappen:

button.addEventListener('click', function() { // her skal vi utføre AJAX-forespørselen });

La oss nå utføre AJAX-forespørselen. For dette brukes funksjonen fetch, som tar adressen til siden vi vil hente innholdet fra som parameter. La oss spesifisere adressen til siden ajax.html på serveren vår:

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

fetch vil returnere et promise. Saken er at en forespørsel om en side via AJAX er en asynkron operasjon, fordi det vil ta litt tid før siden svarer oss.

La oss hente resultatet fra promise-et:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // serverens svar ligger i variabelen response }); });

La oss forenkle ved å fjerne den unødvendige variabelen:

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

La oss forenkle ved å bruke pilfunksjon:

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

La oss presentere det på en mer lesbar måte:

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

I variabelen response finnes et ganske komplekst objekt av klassen Response:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { console.log(response); // objekt av klassen Response }); });

Vi skal studere dette objektet grundigere i de følgende leksjonene, men foreløpig trenger vi det enkleste - å hente teksten fra den forespurte siden. For dette finnes det en metode text i dette objektet. Denne metoden returnerer imidlertid ikke selve teksten på siden, men et promise med teksten:

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

For å komme til teksten på siden, må promise-et, hentet fra response.text, behandles en gang til:

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

Så, vi har endelig fått teksten fra den forespurte siden og kan for eksempel skrive den inn i diven vår:

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

Det er gitt tre knapper og en div. På serveren er det gitt tre sider. Gjør slik at hver av knappene laster inn den tilsvarende siden i diven.

La det være fem sider på serveren. La det første klikket på knappen laste inn den første siden, det andre klikket - den andre, og så videre, til sidene er oppbrukt.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis