AJAX példa / minta feladat

A péla egy weboldalt mutat be, amely interaktív űrlapot használ a felhasználói adatok bekérésére, majd a válaszokat aszinkron módon jeleníti meg. A kód használatával a felhasználók megadhatják nevüket és foglalkozásukat, ezeket az adatokat pedig POST kéréssel küldik el a háttérszervernek. Az alábbiakban részletezem a kód működését.

<!DOCTYPE html> <html lang="hu"> <head> <meta charset="UTF-8"> </head> <body> <main> <form id="data-form" method="POST" action="/data"> <label for="nev">Név:</label> <input type="text" id="nev" name="nev"> <br><br> <label for="foglalkozas">Foglalkozás:</label> <input type="text" id="foglalkozas" name="foglalkozas"> <br><br> <button id="get-data-btn">Kattints ide!</button> </form> <div id="data-container"></div> </main> <script> const getDataBtn = document.getElementById('get-data-btn'); const dataContainer = document.getElementById('data-container'); var getDataFromServer = function(e) { e.preventDefault(); let nev = document.getElementById('nev'); let foglalkozas = document.getElementById('foglalkozas'); let params = "nev=" + nev.value + "&foglalkozas=" + foglalkozas.value; let xhr = new XMLHttpRequest(); xhr.open("POST", "/data"); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.onload = function() { if (xhr.status === 200) { let data = JSON.parse(xhr.responseText); dataContainer.innerHTML = ` <p>Név: ${data.nev}</p><p>Foglalkozás:${data.foglalkozas}</p> `; console.log(data); } }; xhr.send(params); } getDataBtn.addEventListener('click', getDataFromServer); </script> </body> </html>

Kód működése

HTML Rész

JavaScript Rész

JavaScript Logika

A JavaScript rész kezeli az űrlap adatait és kommunikál a szerverrel.

Eseményfigyelő

const getDataBtn = document.getElementById('get-data-btn'); getDataBtn.addEventListener('click', getDataFromServer);

Adatküldés

var getDataFromServer = function(e) { e.preventDefault(); // Megakadályozza az alapértelmezett űrlapküldést let nev = document.getElementById('nev'); let foglalkozas = document.getElementById('foglalkozas'); let params = "nev=" + nev.value + "&foglalkozas=" + foglalkozas.value;

Aszinkron Kérés Készítése `

xhr.open("POST", "/data"); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

Válaszkezelés

xhr.onload = function() { if (xhr.status === 200) { let data = JSON.parse(xhr.responseText); dataContainer.innerHTML = ` <p>Név: ${data.nev}</p> <p>Foglalkozás: ${data.foglalkozas}</p> `; console.log(data); } };

Kérés Küldése

xhr.send(params);

Fejlesztési Lehetőségek


A fetch API használata egyszerűbbé és olvashatóbbá teszi az aszinkron kérések kezelését a JavaScript-ben. Az alábbi példa bemutatja, hogyan lehet a korábban említett űrlapot módosítani, hogy a fetch API-t használja.

A HTML kód változatlan marad, mivel a felhasználói felület és az űrlap felépítése nem változik.

<!DOCTYPE html> <html lang="hu"> <head> <meta charset="UTF-8"> </head> <body> <main> <form id="data-form" method="POST" action="/data"> <label for="nev">Név:</label> <input type="text" id="nev" name="nev" required><br><br> <label for="foglalkozas">Foglalkozás:</label> <input type="text" id="foglalkozas" name="foglalkozas" required><br><br> <button id="get-data-btn">Kattints ide!</button> </form> <div id="data-container"></div> </main> <script> const getDataBtn = document.getElementById('get-data-btn'); const dataContainer = document.getElementById('data-container'); var getDataFromServer = function(e) { e.preventDefault(); // Megakadályozza az alapértelmezett űrlapküldést let nev = document.getElementById('nev').value; let foglalkozas = document.getElementById('foglalkozas').value; // Ellenőrizd, hogy a mezők ki vannak-e töltve (opcionális) if (!nev || !foglalkozas) { alert('Kérlek, töltsd ki az összes mezőt!'); return; } // URL-kódolt paraméterek létrehozása let params = new URLSearchParams(); params.append('nev', nev); params.append('foglalkozas', foglalkozas); // Fetch API kérés fetch('/data', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }) .then(response => { if (!response.ok) { throw new Error(`Hiba történt: ${response.status}`); } return response.json(); }) .then(data => { // Megjeleníti a választ dataContainer.innerHTML = ` <p>Név: ${data.nev}</p> <p>Foglalkozás: ${data.foglalkozas}</p> `; }) .catch(error => { console.error('Hiba:', error); dataContainer.innerHTML = `<p>${error.message}</p>`; }); } getDataBtn.addEventListener('click', getDataFromServer); </script> </body> </html>

Kód Magyarázata

Űrlap

A HTML űrlap változatlan marad, viszont érdemes a required attribútummal jelölni a mezőket, így a böngésző automatikusan ellenőrzi a kitöltést.

Fetch API

let params = new URLSearchParams(); params.append('nev', nev); params.append('foglalkozas', foglalkozas);
fetch('/data', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params })

JavaScript Logika

A JavaScript felelős az űrlap adataival való interakcióért és a szerverrel való kommunikációért.

<script> const getDataBtn = document.getElementById('get-data-btn'); const dataContainer = document.getElementById('data-container');

Eseményfigyelő

var getDataFromServer = function(e) { e.preventDefault(); // Megakadályozza az alapértelmezett űrlapküldést

Adatok kinyerése

let nev = document.getElementById('nev').value; let foglalkozas = document.getElementById('foglalkozas').value;

Validáció A kód ezen része biztosítja, hogy a felhasználó minden mezőt kitöltött-e, mielőtt az adatokat elküldené.

if (!nev || !foglalkozas) { alert('Kérlek, töltsd ki az összes mezőt!'); return; }

Adatok URL-kódolása

let params = new URLSearchParams(); params.append('nev', nev); params.append('foglalkozas', foglalkozas);

Fetch API Kérés

fetch('/data', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params })

Válaszkezelés

.then(response => { if (!response.ok) { throw new Error(`Hiba történt: ${response.status}`); } return response.json(); })

Eredmény megjelenítése

.then(data => { dataContainer.innerHTML = ` <p>Név: ${data.nev}</p> <p>Foglalkozás: ${data.foglalkozas}</p> `; })

Hibakezelés

.catch(error => { console.error('Hiba:', error); dataContainer.innerHTML = `<p>${error.message}</p>`; });