⊗jsSpAXFt 244 of 294 menu

Basiswerk met fetch in AJAX

Laten we nu eens kijken hoe we een deel van een pagina kunnen laden met behulp van AJAX. Stel dat op onze pagina index.html een div en een knop zijn geplaatst (hier wordt de inhoud van body getoond):

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

Stel dat we ook een pagina ajax.html hebben, waarop drie alinea's staan (zonder paginatags, gewoon alinea's):

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

Laten we ervoor zorgen dat bij een klik op de knop op de pagina index.html in de div de inhoud van de pagina ajax.html wordt geladen.

Om dit te doen, laten we eerst verwijzingen naar onze elementen in variabelen zetten:

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

Laten we een click event listener aan de knop toevoegen:

button.addEventListener('click', function() { // hier voeren we het AJAX verzoek uit });

Laten we nu het AJAX verzoek uitvoeren. Hiervoor gebruiken we de functie fetch, die als parameter het adres van de pagina krijgt waarvan we de inhoud wil willen ontvangen. Laten we het adres van de pagina ajax.html op onze server opgeven:

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

fetch zal als resultaat een promise teruggeven. Het punt is dat een verzoek voor een pagina via AJAX een asynchrone operatie is, omdat het enige tijd zal duren voordat de pagina ons antwoordt.

Laten we het resultaat van de promise verkrijgen:

button.addEventListener('click', function() { let promise = fetch('/ajax.html'); promise.then(function(response) { // het antwoord van de server ligt in de variabele response }); });

Laten we het vereenvoudigen door de overbodige variabele weg te laten:

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

Laten we het vereenvoudigen door gebruik te maken van een arrow functie:

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

Laten we het in een beter leesbare vorm presenteren:

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

De variabele response bevat een behoorlijk complex object van de klasse Response:

button.addEventListener('click', function() { fetch('/ajax.html').then(response => { console.log(response); // object van de klasse Response }); });

We zullen dit object in de komende lessen diepgaand bestuderen, maar voor nu hebben we het eenvoudigste nodig - de tekst van de opgevraagde pagina verkrijgen. Hiervoor bestaat er in dit object een methode text. Deze methode retourneert echter niet de tekst van de pagina, maar een promise met de tekst ervan:

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

Om bij de paginatekst te komen, is het nodig de promise, verkregen uit response.text, opnieuw te verwerken:

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

Dus, we hebben eindelijk de tekst van de opgevraagde pagina ontvangen en kunnen deze bijvoorbeeld in onze div plaatsen:

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

Er zijn drie knoppen en een div gegeven. Op de server zijn drie pagina's gegeven. Zorg ervoor dat elke knop de bijbehorende pagina in de div laadt.

Stel dat er vijf pagina's op de server zijn. Laat de eerste klik op de knop de eerste pagina laden, de tweede klik - de tweede, en zo verder, totdat de pagina's op zijn.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren