 |
spaniol.MyForum.ro Discutii legate pe orice tema doriti :)
|
| Subiectul anterior :: Subiectul urmator |
| Autor |
Mesaj |
Spaniol Administrator


Data inscrierii: 06/Mar/2008 Mesaje: 10 Localitate: Oradea
|
Trimis: 06/03/2008 12:37 Titlul subiectului: [PHP] Ajax cu libraria Ajax in PHP |
|
|
PHP ?i Ajax cu libr?ria nAjax
Prin acest articol vreau sa ii ajut pe cei care au trebuință de functii AJAX si sunt dispusi sa o invete intr-un crash-course de 2 ore. Am sa incep cu o scurta descriere despre cum am ajuns sa am necesitate de aceasta technologie dupa care am sa explic cum se foloseste libraria nAjax.
Sunt programator web si lucrez la variate applicatii we de cca 4 ani (2 ca freelancer si 2 ca angajat la o firma). In acest timp m-am intalnit cu mai multe probleme care par nesimnificative dar cu technologiile existente pareau de nerezolvat (si trebuia intodeauna sa gasesc un compromis sau un work-around)
ex.:
avem 3 tabele: Tari, Judete si Localitati (po****te cu sute de mii de valori)
Vrem un form la care sa putem selecta localitatea unui utilizator cu 3 combo box-uri. Selectam tara dupa care judetul si in sfirsit localitatea. La fiecare selectare, vrem ca combobox-ul urmator sa fie po****t cu un set de valori filtrat pe precedentul lui.
Sa faci o asemenea filtrare in PHP e simplu: pasezi variabilele cu GET si recreezi formul. (presupunem ca mai avem si alte campuri care trebuie salvate) Astfel se poate realiza filtrarea combo-box-ului urmator communicand cu serverul generand urmatorul pas prin reiinoirea paginii.
Acest lucru generaza trafic nedorit pentru server si e incomod si pentru utilizator (trebuie sa astepte refreshul paginii) Pentru a evita acest lucru apelam la javascript.
Se ataseaza la fiecare Combobox un “event” care sa declanseze po****rea urmatorului. Din pacate nu avem posibilitatea de a cere dinainte serverului toate valorile posibile pentru filtrare in javascript (am precizat ca avem sute de mii de valori).
Aici intra AJAX in joc. Cu ajax putem atasa obiecte PHP pentru a fi gestionate in mod asincron dupa ce pagina a fost generata de server. Asta inseamna ca putem rula de fapt scripturi php care sa comunice in mod direct cu Javascript. (in cazul nostru pentru a po**** comboboxul urmator)
Ajax este o technica cu care se pot crea interfete interactive pentru aplicatii web. Ajax (Asynchronous JavaScript and XML) este o technica de communicare asincrona desfasurata in background dupa incarcarea paginii, care consta prin schimbarea a mici pachete de date intre server si applicatie. Comunicarea se realizeaza cu javascript iar datele sunt trimise de obicei in formate XML.
Libraria nAjax: http://sourceforge.net/projects/najax/
Pentru a folosi libraria: va necesită sa o descarcati intr-un director accesibil aplicatiei voastre.
1. Creati un fisier Clasa_mea.php in care veti defini o clasa al carui metode vor fi “vizibile” prin Ajax.
Myclass.php
| Citat: | class myclass {
function getJudet($tara_id) {
$retv=””;
$r = mysql_query(“select * from judet where tara_id=” . $tara_id);
for($i=0;$i<count($r);$i++) {
$retv.=”,” . mysql_result($r,$i,”name”);
}
return substr($retv,1); // this cuts the first comma
}
function najaxGetMeta()
{
NAJAX_Client::mapMethods($this, array('getJudet'));
NAJAX_Client::publicMethods($this, array('getJudet'));
}
} |
Fiecare clasa va avea metoda najaxGetMeta(). Metodele visibile vor fi adaugate array-ului. ex. array('getJudet','getTown','getIt')
Atentie: in acest fisier php NU va fi inclus libraria nAjax!! Includerea lui fiind necesara numai in fisierul unde va fi folosit.
2.In fisierul care contine form-ul dv. Includeti la header urmatoarele:
index.php
| Citat: | <?php
require_once('Myclass.php');
require_once('najax/najax.php');
NAJAX_Server::allowClasses('myclass');
if (NAJAX_Server::runServer()) {
exit;
}
?> |
Metoda allowClasses va registra clasa myclass iar metodele vor fi accesabile in javascript.
Sa continuam cu creerea form-ului:
| Citat: | <form>
<select name=”selCountry” id=”selCountryi” onChange=”java script:fillJudet(this);”>
<option value=”1”> Romania </option>
<option value=”2”> Hungary </option>
</select>
<select name=”selJudet” id=”selJudeti”>
</select>
</form> |
Sunt 2 comboboxuri: cu prima se selecteaza tara (acum predefinita pentru simplitate cu doar 2 valori, acesta de fapt va fi po****t cu un query la baza de date). Acest combobox va avea atasat eventul onChange care sa execute functia fillJudet().
| Citat: | <?= NAJAX_Utilities::header('.') ?>
<script type="text/javascript">
var ajax_obj1 = <?= NAJAX_Client::register(new FirstClass()) ?>;
function fillJudet(obj) {
ajax_obj1.getJudet (obj.options[obj.selectedIndex].value , function(result) {
arr = result.split(",");
sobj = document.getElementById('selJudeti');
for(i=0;i<arr.length;i++) {
el = document.createElement('option');
el.text=arr[i];
el.value=arr[i];
try {
sobj.add(el, null);
}
catch(ex) {
sobj.add(el); // IE only
}
}
});
}
</script> |
Functia fillJudet() va accesa clasa myclass prin ajax si va executa getJudet (care executa un query la baze de date filtrand pe valoarea trimisa prin javascript, adica valoarea tarii selectate). Dupa primirea rezultatului va parcurge elementele sirului adaugand la comboboxul selJudet judetele obtinute.
De aici puteti experimenta cu mai numeroase medote si clase, comunicarea fiind foarte usoara cum se vede si din exemplu. E important sa tineti in minte, ca ajax este o comunicatie asincrona si este influentata de bandwidth-ul pe care utilizatorul il are. Pentru aplicatii serioase vor fi necesare testari de erori, in excepțional legate de submiterea unui form care nu are inca rezultatele comunicarii prin Ajax.
-------------------- |
|
| Sus |
|
 |
animalplanet2 Junior

Data inscrierii: 11/Iul/2012 Mesaje: 5 Localitate: Poland
|
Trimis: 31/07/2012 00:20 Titlul subiectului: |
|
|
| Thanks for the article! I'm from Ukraine we have a rather difficult to find useful interesting information. |
|
| Sus |
|
 |
misanchik Junior

Data inscrierii: 22/Iul/2012 Mesaje: 5 Localitate: Bulgaria
|
Trimis: 31/07/2012 06:35 Titlul subiectului: |
|
|
| I found this post very useful! |
|
| Sus |
|
 |
animalplanet2 Junior

Data inscrierii: 11/Iul/2012 Mesaje: 5 Localitate: Poland
|
Trimis: 02/08/2012 00:58 Titlul subiectului: |
|
|
| I am very happy because find this info thank you very much people!!!) |
|
| Sus |
|
 |
|
|
Nu puteti crea un subiect nou in acest forum Nu puteti raspunde in subiectele acestui forum Nu puteti modifica mesajele proprii din acest forum Nu puteti sterge mesajele proprii din acest forum Nu puteti vota in chestionarele din acest forum
|
Powered by phpBB © 2001, 2005 phpBB Group Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
|