⊗jsSpAXFt 244 of 294 menu

Grundläggande arbete med fetch i AJAX

Låt oss nu titta på hur man laddar en del av en sida med AJAX. Låt på vår sida index.html finnas en div och en knapp (här visas innehållet i body):

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

Låt oss också ha en sida ajax.html, som innehåller tre stycken (utan sidtaggar, bara stycken):

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

Låt oss göra så att när man klickar på knappen på sidan index.html laddas innehållet på sidan ajax.html in i div:en.

För att göra detta, låt oss först få referenser till våra element i variabler:

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

Låt oss lägga till en klickhanterare på knappen:

button.addEventListener('click', function() { // här kommer vi att utföra AJAX-förfrågan });

Låt oss nu utföra en AJAX-förfrågan. För detta används funktionen fetch, som tar adressen till sidan vars innehåll vi vill få som parameter. Låt oss ange adressen till sidan ajax.html på vår server:

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

fetch kommer att returnera ett promise som resultat. Saken är den att en förfrågan om en sida via AJAX är en asynkron operation, eftersom det kommer att gå någon tid innan sidan svarar oss.

Låt oss få resultatet av promiset:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // serverns svar finns i variabeln response }); });

Låt oss förenkla genom att ta bort den onödiga variabeln:

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

Låt oss förenkla genom att använda en pilfunktion:

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

Låt oss presentera det i en mer lättläst form:

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

I variabeln response finns ett ganska komplext objekt av klassen Response:

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

Vi kommer att studera detta objekt mer ingående i kommande lektioner, men just nu behöver vi det enklaste - få texten på den efterfrågade sidan. För detta finns metoden text i detta objekt. Denna metod returnerar dock inte sidans text, utan ett promise med dess text:

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

För att komma åt sidans text måste promiset som erhållits från response.text behandlas en gång till:

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

Så, vi har äntligen fått texten på den efterfrågade sidan och kan till exempel skriva den till vår div:

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

Det finns tre knappar och en div. På servern finns tre sidor. Gör så att varje knapp laddar motsvarande sida i div:en.

Låt det finnas fem sidor på servern. Låt det första klicket på knappen ladda den första sidan, det andra klicket den andra, och så vidare tills sidorna tar slut.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa