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>
HTML Rész
JavaScript Rész
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>
Ű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
})
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>`;
});