Prototype Ajax funció meghívás diszkrét JS-sel
Hali!
Ahogy kezdek előre jutni a témában úgy exponenciálissan nő az ismeretlen dolgok száma, és sajna nem mindre találok választ a tutorialokban... :(
A Prototype Ajax.Update függvényét szeretném meghívni a bejelentkező formomnál, úgy hogy a form nev és pass mező értékét átadom a login.php filenak.
A Prototype manualban ennek a példa alapján indúltam el:Illetve a diszkrét javascript cikk alapján próbálkozom.
Eddig jutottam:A html rész:Ez szépen lefut a kattintás után, egészen az alert('3 vege'); ig, és utána a login.php visszatérési üzenetét nem a <div class="login-valasz"></div> -ba, hanem az aktuális ablakot újratöltve, csak a visszatérési üzenetet jeleníti meg.
A másik problémám pedig, hogy hogyan tudnám átadni a nev és pass mező értékeit a login.php-nak
előre is köszi a helpet...
bye Tomi
■ Ahogy kezdek előre jutni a témában úgy exponenciálissan nő az ismeretlen dolgok száma, és sajna nem mindre találok választ a tutorialokban... :(
A Prototype Ajax.Update függvényét szeretném meghívni a bejelentkező formomnál, úgy hogy a form nev és pass mező értékét átadom a login.php filenak.
A Prototype manualban ennek a példa alapján indúltam el:
var url = 'valami.php';
var pars = 'foo=bar';
var target = 'div-class';
var myAjax = new Ajax.Updater(target, url, {method: 'post', parameters: pars});
Eddig jutottam:
/* --- diszkrét javascript --- */
function getElementsByClass(name) {
var found = 0;
var elems = new Array();
var alltags = document.getElementsByTagName("*");
if (alltags) {
for (i=0; i < alltags.length; i++) {
if (alltags[i].className==name) {
elems[found++]=alltags[i];
}
}
}
return(elems);
}
function classLinkHandler(){
var elems=getElementsByClass('link');
for(i=0;i<elems.length;i++) {
if (elems[i].href && elems[i].href!='') {
addEvent(elems[i],'click',doLink);
}
}
}
function doLink(ev1)
{
// vagy megkapjuk az esemény objektumot, vagy meg kell szereznünk
ev1 || (ev1 = window.event);
// mely objektum váltotta ki az eseményt?
var source;
if (typeof ev1.target != 'undefined') {
source = ev1.target;
} else if (typeof ev1.srcElement != 'undefined') {
source = ev1.srcElement;
} else { return(true); }
/* Prototype rész */
var url = source.href;
var pars = 'foo=bar';
var target = 'login-valasz';
/* hibakeresés miatt van benne az alert */
alert('3 vege');
var myAjax = new Ajax.Updater(target, url, {method: 'post', parameters: pars});
}
addEvent(window, 'load', classLinkHandler);
<a href="login.php" class="link">
<input class="gomb" name="send" type="button" id="send" value="Bejelentkezés">
</a>
<div class="login-valasz"></div>
A másik problémám pedig, hogy hogyan tudnám átadni a nev és pass mező értékeit a login.php-nak
előre is köszi a helpet...
bye Tomi
Probléma probléma probléma
1. Tartalamzza a getElemetsByClassName DOM kiterjesztést.
2. Tartalmaz egy observe osztályt ami az események kezelésére tökéletes.
3. Nem jó a HTML rész ne linket használj hanem FORM tag-ot.
A FORM tag Submit eseményéhez kell rendelni az ajax lekérdezést.
És a prototype serialize fügvényét használva url-en keresztül átadható a PHP-nek a form összes elemének értéke.
Röviden ennyi :)
Sok sikert és kitartást szükséged lessz rá. Ha nem megy kezd újra. Lépésről lépésre haladj előre. Minden működő verziót ments el.
tényleg rövid volt...
Szóval..
A leírásban ez van, de sajna az elnevezéseket nem vágom annyira.. :(
element: objektum vagy azonosító,
name: az esemény neve (pl. 'click', 'load'),
observer: a függvény ami lekezeli az eseményt,
useCapture: ha true, akkor a capture fázisban, ha pedig false akkor bubbling fázisban kezeli le az eseményt.
légyszi valaki homályosítson fel a félkövér cuccok jelentésével
És még egy kérdésem lenne.. a submit folyamatot milyen függvénnyel lehet megszakítani magában a javascript-ben, ha nem szeretném az onclick="return(false)" -t használni.
köszi Tomi
Hmmm
De ha már ide irtam.
elemet: Annak az elemnek az ID je vagy objaktum azonosítója amelyhez az eseményt rendelni szeretnéd.
useCapture: az addEventListener függvény 3. paraméterét takarja.
És még egy... return(false) bárhol használhatod a meghívot függvényben és így megszakítod a függvény lefutását. Miért használnál mást mikkor ez a megoldás.
úgy van ahogy mondod..
bye Tom
parameterek átadása a linkkel..
Még egy olyan kérdésem lenne, hogy magában egy linkben..
pl: index.php?page=news&cikk=41
A paraméterek átadására van valami függvény a prototypeban? vagy az a.href objektumnak ezek is átkéne adnia? Ha átadja akkor hogyan tudom kinyerni a.href tömbböl? mert alapból csak a linket látom (index.php)
bye Tomi
help plz :(
Szóval a linkekben lévő paramétereket szeretném használni, pl egy cikkre igy hivatkozom: index.php?page=cikk&id=11
az ehez tartozó hozzászólásokat szeretném megjeleníteni, lehetőleg teljes oldal letöltödés nélkül..
a gondom hogy még mindig nem tudom hogy hogyan mondjam meg az ajax által meghívott php kódnak, hogy ezt meg ezt kérje le az adatbázisból..
elöre is köszi...
parameters
Ennek add meg a "page=cikk&id=11"-t. Amugy ha hasznalsz firebug kiterjesztest, ott lehet kovetni az XMLHttpREquest-eket. A feldolgozo fileba teszel egy print_r( $_REQUEST) -et es Firebugban latod milyen valtozokat kapott meg.
átadás..
mert addig ok hogy
hash objektum ?
function testHash()
{
var a = [];
//az asszociatív tömb feltöltése
a['first'] = 10;
a['second'] = 20;
a['third'] = 30;
//konvertájuk
var h = $H(a);
alert(h.toQueryString()); //displays: first=10&second=20&third=30
}
</script>
asszociatív tömböt feltöltöd, konvertálod hash-objektummá, majd a hash.toQueryString(), mehet paramnak szvsz :)
egy megoldás
echo 'cikk '.$_GET['news'].' vagyok';
?>
itt meg bőszen müxik
http://toxin.hu/ajax/links.html#
jó szórakozást :)
ui: forró ajánlat: http://www.sergiopereira.com/articles/advjs.html és az alján a 2 könyv
müködik csak csúnya a link
már mükszik a dolog, csak egy gond van... a linkjeim igy néznek ki :
nem lehet ezt valahogy leállitani? mert a var myAjax = new Ajax.Updater ... sor után ha beszúrok egy alert(); -et akkor az még végre hajtódik és utána töltödik újra az egész weblap..
A return(false); sem állitja le, nincs valami header küldés vagy ilyesmi ami menet közben lévő "link végrehalytást" megállítja???
előre is köszi