ugrás a tartalomhoz

Prototype Ajax funció meghívás diszkrét JS-sel

monghuz · 2006. Már. 26. (V), 18.10
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:
  1. var url = 'valami.php';  
  2. var pars = 'foo=bar';  
  3. var target = 'div-class';  
  4. var myAjax = new Ajax.Updater(target, url, {method: 'post', parameters: pars});  
Illetve a diszkrét javascript cikk alapján próbálkozom.

Eddig jutottam:
  1. /* --- diszkrét javascript --- */  
  2. function getElementsByClass(name) {  
  3.   var found = 0;  
  4.   var elems = new Array();  
  5.   var alltags = document.getElementsByTagName("*");  
  6.   if (alltags) {  
  7.     for (i=0; i < alltags.length; i++) {  
  8.         if (alltags[i].className==name) {  
  9.           elems[found++]=alltags[i];  
  10.         }  
  11.     }  
  12.   }  
  13.   return(elems);  
  14. }  
  15.   
  16.   
  17. function classLinkHandler(){  
  18.  var elems=getElementsByClass('link');  
  19.   for(i=0;i<elems.length;i++) {  
  20.     if (elems[i].href && elems[i].href!='') {  
  21.       addEvent(elems[i],'click',doLink);  
  22.     }  
  23.   }  
  24. }  
  25.   
  26. function doLink(ev1)  
  27. {  
  28.     // vagy megkapjuk az esemény objektumot, vagy meg kell szereznünk  
  29.     ev1 || (ev1 = window.event);  
  30.   
  31.     // mely objektum váltotta ki az eseményt?  
  32.     var source;  
  33.     if (typeof ev1.target != 'undefined') {  
  34.         source = ev1.target;  
  35.     } else if (typeof ev1.srcElement != 'undefined') {  
  36.         source = ev1.srcElement;  
  37.     } else { return(true); }  
  38. /* Prototype rész */  
  39.     var url = source.href;  
  40.     var pars = 'foo=bar';  
  41.     var target = 'login-valasz';  
  42. /* hibakeresés miatt van benne az alert */  
  43. alert('3 vege');  
  44.     var myAjax = new Ajax.Updater(target, url, {method: 'post', parameters: pars});  
  45. }  
  46.   
  47. addEvent(window, 'load', classLinkHandler);  
A html rész:
  1. <a href="login.php" class="link">  
  2. <input class="gomb" name="send" type="button" id="send" value="Bejelentkezés">  
  3. </a>  
  4.   
  5. <div class="login-valasz"></div>  
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
 
1

Probléma probléma probléma

KoVaLa · 2006. Már. 26. (V), 21.07
Prototype magyarul

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.
2

tényleg rövid volt...

monghuz · 2006. Már. 26. (V), 23.05
Mielött félre értés esik, a cim ironikus volt :D

Szóval..
A leírásban ez van, de sajna az elnevezéseket nem vágom annyira.. :(
observe(element, name, observer, useCapture)

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
3

Hmmm

KoVaLa · 2006. Már. 27. (H), 10.44
Jó lenne ha beszereznél minnél több irodalmat a témában (javascript) mielőtt tovább folytatnád. Sok problémától megmentenéd önmagad.

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.
4

úgy van ahogy mondod..

monghuz · 2006. Már. 27. (H), 13.49
Köszi szépen a segitséget... amúgy javascriptet most kezdtem el a prototypeval együtt szóval még nagyon az elején vagyok, de azért tanulok.. :P

bye Tom
5

parameterek átadása a linkkel..

monghuz · 2006. Már. 29. (Sze), 16.29
Hali!

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
6

help plz :(

monghuz · 2006. Ápr. 7. (P), 00.47
Lehet hogy hülyé fogalmaztam, vagy csak senki nem tud segíteni.. de hátha most :D
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...
7

parameters

Anonymous · 2006. Ápr. 7. (P), 10.13
Ha az Ajax.Updater osztalyt hasznalod ott van egy parameters tulajdonsag.
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.
8

átadás..

monghuz · 2006. Ápr. 7. (P), 11.12
Na igen, addig eljutottam hogy annak kell átadni, csak a mikéntjével vagyok gondban, vagyis magának a js függvénynek hogyan tudom átadni a hivatkozásnak a paraméteres részét?
mert addig ok hogy
  1. function feldolgozo(link){  
  2.      var url = 'index.php';  
  3.      var pars = 'valtozo=ertek';  
  4.      var target = 'div-keret';  
  5.      var myAjax = new Ajax.Updater(target, url, {method: 'get', parameters: pars});  
  6. }  
bocsi hogy ennyire láma vagyok de már egy csomó cikket elolvastam és azokban legtöbbször formértékeket adnak át a serialize osztályal, viszont itt nekem egy árva form-om sincs :(
9

hash objektum ?

toxin · 2006. Ápr. 7. (P), 15.13
http://prototype.rajmi.hu/prototype.js.hu.html

<script>
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 :)
10

egy megoldás

toxin · 2006. Ápr. 7. (P), 16.47
aki nemérti járjon utánna :)
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />  
  5. <title>Untitled Document</title>  
  6. <script  src="scripts/prototype.js" type="text/javascript" language="javascript"></script>  
  7. <script type="text/javascript" language="javascript">  
  8.       
  9. var myNewsClass =   
  10.   
  11.     Class.create();  
  12.     myNewsClass.prototype = {  
  13.         initialize : function (newsLinkClass,wrapper,placeholder) {  
  14.             var elems = document.getElementsByClassName(newsLinkClass,wrapper);                   
  15.             for (var i=0;i<elems.length;i++)  
  16.             {  
  17.                     var elem = elems[i];  
  18.                     elem.id = i;  
  19.                     elem.myNewsClassClickHandler = this;  
  20.                     elem.onclick = this.onClickHandler;   
  21.             }  
  22.             this.placeholder = placeholder;  
  23.         },  
  24.           
  25.         onClickHandler : function(){  
  26.             var myNewsClassClickHandler = this.myNewsClassClickHandler;  
  27.             if (myNewsClassClickHandler) myNewsClassClickHandler.ajaxReq(this.id);  
  28.                   
  29.         },  
  30.           
  31.         ajaxReq : function (id){  
  32.             var url = 'ajax_server.php';  
  33.             var pars = '&news='+id;  
  34.             var myAjax = new Ajax.Updater( this.placeholder, url, { method: 'get', parameters: pars });           
  35.         }  
  36.     }  
  37.    
  38. window.onload = function(){  
  39.           
  40.     var cikkObject = new myNewsClass('cikklink','cikklinkek','cikkhelye');        
  41. }  
  42.   
  43. </script>  
  44. </head>  
  45. <body>  
  46.   
  47. <div id="cikklinkek">  
  48.     <a class="cikklink" href="#"> cikk0 vagyok</a>  
  49.     <a class="cikklink" href="#"> cikk1 vagyok</a>  
  50.     <a class="cikklink" href="#"> cikk2 vagyok</a>  
  51. </div>  
  52.   
  53. <div id="cikkhelye">  
  54.   
  55. </div>  
  56.   
  57. </body>  
  58. </html>  
php rész meg csak a példa kedvéért

<?php

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
11

müködik csak csúnya a link

monghuz · 2006. Május. 5. (P), 01.57
hali!

már mükszik a dolog, csak egy gond van... a linkjeim igy néznek ki :
  1. <a href="#page=hirek&parameter=12" class="link">12 es cikk</a>  
a gondom, hogy 2 kattintás után (12es 13as cikk) valami ilyesmi lesz a cimsorban
  1. www.oldal.hu/index.php?page=hirek&parameter=12#page=hirek&parameter=13  
ezt úgy ki tudom küszöbölni, hogy a linket mondjuk hirek.php?parameter=12 formában adom meg, viszont igy ha betöltödik az adott cikk az AJAX-szal utána a hirek.php ugyan úgy végrehajtódik az egész oldal újratöltődésével..

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