Ez a kis tutorial, rendkívül könnyen megérthető, egyszerűen replikálható, és hihetetlenül hasznos lesz. A leírásban egy rendkívül egyszerű contact formot fogok használni. A mezők: név, email és telefonszám lesznek. A form adatai úgy jutnak el a szerverhez, hogy ez nem ismeri a hozza jutó adatokat, és ami ennél is fontosabb, a javascript ami küldi az sem ismeri a form tartalmát Bizonyára már számtalanszor megtörtént, hogy egy formot ajax-szal szerettünk volna elküldeni a szerver oldalnak. Ez szép és jó, de a gond akkor kezdődik, mikor a formunk nagy, akár több, mint 100 eleme van. Ebben az esetben a régi jó megoldás, mikor egyenként vesszük át az értékeket nem elfogadható.

var elem1 = $('#elem1').val();
var elem1 = $('#elem1').val();
...
var elemn = $('#elemn').val();
De mondhatjuk, hogy ez még a jobbik eset, hisz ebben az esetben tudjuk hogy a formnak egy véges számú eleme van. A rosszabbik eset az, ha a formunk egy generált form. Ebben az esetben a form elemei nem ismertek, csak a generálás végén jönnek létre. Természetesen léteznek megoldások, melyeket alkalmazhatunk (pl. checkboxok esetén az elemek neve egy tömb lesz), de ezek egyike sem igazán kényelmes. A következőkben épp az ilyen esetekben alkalmazott egyszerű megoldást szeretném bemutatni a jQuery keretrendszer segítségével. Az egész leírás lényege, hogy a nézetet teljesen elvonatkoztassuk a szerveroldaltól, illetve a javascriptől. Így vegül is teljesen mindegy, hogy hogyan néz ki a formunk, a szerver egy tömböt fog kapni, ezt bejárva értelmezi a kapott adatokat. ## 1. lépés: Form felépítése
Mint már fentebb is említettem a formunk rendkívül egyszerű lesz.
<script src="jquery-1.3.2.js" type="text/javascript"><!--mce:0--></script>
<script src="test.js" type="text/javascript"><!--mce:1--></script>
<script type="text/javascript"><!--mce:2--></script>
<form id="frm">
<label for="nev">Nev:</label>
<input id="nev" name="nev" type="text" />
<label for="email">E-mail:</label>
<input id="email" name="email" type="text" />
<label for="telefonszam">Telefonszam:</label>
<input id="telefonszam" name="telefonszam" type="text" />
<a id="send" href="#">SEND</a></form>
<div id="response" style="display: none;">
Response:</div>
<div id="status" style="display: none;">
Status:</div>
A form melett van kettő div elemünk is. Ezekre szükségünk van hisz valahogy a visszatérített választ is szeretnénk látni. Most hogy meglennénk a formunkkal, lássuk, hogy jön be a képbe a jQuery, azaz a JavaScript. ## 2. lépés: test.js - form adatainak serializálása és továbbküldése
$(document).ready(function() {
Editor.initEventHandlers();
});
var Editor = {
initEventHandlers: function () {
$("#send").click(function(e){
Editor.formsubmit();
return false;
});
},
formsubmit: function () {
var url = "process.php";
$.post(
url,
$('#frm').serialize(),
Editor.onsubmitcomplete
);
},
onsubmitcomplete : function(data,textStatus){
$('#response').show();
$('#status').show();
$('#response').append(data);
$('#status').append(textStatus);
}
}
Talán az egész leírás leglényegesebb részlete a fenti kódrészlet. Láthatjuk, hogy először is inicializáljuk az Editor objektum initEventHandlers metódusát. Ez viszonylag egyszerű dolgot végez. A "send" id link click eseményét felülírja az Editor.formsubmit metódussal. A formsubmit serializálja a form elemeit és ezt továbbküldi POST-tal a process.php-nak. A szervertől kapott választ az "onsubmitcomplete" metódus dolgozza fel. Első lépésben láthatóvá teszi a "response" es a "status" diveket, majd kitölti őket a szervertől kapott válasszal. Az "onsubmitcomplete" függveny egy callback fügveny mely akkor kerül meghívásra, amikor a szervertől válasz érkezik. Ez egy jQuery függvény, természetesen neve lehet bármi. Három paramétere van, a "data", "textStatus" es az "XMLHttpRequest". Mi ebből az első kettőt használjuk. A data a visszatérített válasszöveg lesz. Ez amit effektív válaszol a szerver. A második paraméter a request státusza, ezt a "status" divben tároljuk. ## 3 lépás: process.php - szerver oldal.

A szerver oldalon példánkban rendkívül egyszerű dolgot végzünk. Kiíratjuk a $_POST változó tartalmát, hisz mi erre vagyunk kíváncsiak, hogy a jQuery miképpen küldi el a form elemeit. Nagyjából meg is lennénk. A test.php lefuttatása után ha mindent jól végeztünk a következőt kellene lássuk:
Response:
array(3) {
["nev"]=>
string(6) "Lorand"
["email"]=>
string(16) "***@gmail.com"
["telefonszam"]=>
string(10) "0742356789"
}
Status:success
Remélem sikerült szemléltetnem, hogy a form serializálása milyen egyszerűvé teszi a nagyobb formok feldolgozását, de én mindenképpen kisebb formoknál is tudnám ajánlani. Sokan amiatt sírnak, hogy nem tudják validálni a formjukat. Erre én azt szoktam mondani, hogy egy form elemeinek az eggyenkénti validálása már amúgy is kiment a divatbol, hisz sokszor nem is tudjuk, hogy is néz ki a formunk. Erre is megvannak mara a technikák: Livevalidation, jQuery validation plugin. Mindenkinek tudom őket ajánlani, rendkívül egyszerűen testreszabhatóak, és könnyen implementálhatóak. Tehát még egyszer a leírás lényege: a nézetet teljesen, vagy legalábbis lehetőleg a legjobban elvonatkoztatni a szerver oldaltol (controller), így a jövőbeni módosításoknál nem kell a js állományunkat is módosítsuk. ### Hasznos linkek:
További jó kódolást. ---
Szerkesztve: BlackY. Helyesírási hibák és ékezetek javítása, e-mail cím eltávolítása.
Harder
Profil
Korábbi hozzászólások (8)
A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.
Hello,
Nagyon jo tutorial. Kellene tobb ilyen reszletes leiras!
Lesz meg:)
Szerkeszve: BlackY. Helysírási hibák
irónikus:)
Sziasztok.
Egy gondom lenne,a checkbox state nem checked nem hozza át a serializált tömbbe.
Szia,
Hat ez nem nagy gond - hatul megnezed ha letezik, ha nem akkor ewzt jelenti nincs becjekkolva.
Na hat ezt majdnem helyesen irtam - remelem ertheto azert
Nem mai tutorial, de hasznos !
Viszont nekem nem működik.
Mint a segitőkész leírásoknál általában az a baja, hogy vagy nem az elején kezdi, vagy nem ér a végére.
A php file pl. nincs itt megírva.
Én megírtam, a $_POST -ot foreachel, de ay a hiba-yit adja hogy:
Parse error: syntax error, unexpected T_DOUBLE_ARROW, expecting ',' or ';' in process.php on line 8
Status:success
A nyolcadik sorban hianyzik egy pontosvesszo, valoszinusitheto a sor vegerol. Ezt latatlanban irom, de valoszinu ott a hiba. Amugy nem nagy kunszt, foreachel bejarod a postot s minden lepesben kiiratod az illeto erteket vagy akarmi mast.
Van hozzáfűznivalód? Írj nekem közvetlenül.
Kapcsolat