[Tutorial JS] AJAX cu XML

#1
Nume Tutorial: AJAX cu XML
Descriere: AJAX cu XML
Download:
Autor: Anonim
Sursa (Link-ul oficial):
tutorialeonline
Propria parere: Folositor.
Tutorialul:

XML (Extensible Markup Language) este un format special de structurare și stocare a datelor în fișiere cu extensia .xml cu o sintaxă bazată pe tag-uri. Dacă nu știți ce face și cum se lucrează cu documente XML, studiați tutorialul de la pagina Documente XML.
În unele cazuri, răspunsul primit de Ajax (datele transmise de la scriptul de pe server) poate fi conținutul unui document XML. Această metodă de lucru fiind frecvent utilizată în aplicațiile API de transfer a datelor de la un server la altul (de la un server extern la site-ul care a solicitat transferul). Sau prin Ajax, se poate citi direct un fișier XML.
În acest tutorial este prezentat modul de afișare în pagina web a datelor dintr-un fișier XML, preluate cu Ajax.
1. Încărcarea datelor cu format XML

Prima etapă este obținerea datelor din XML. Acestea pot fi primite de la PHP (sau altă aplicație de server) sub forma unui șir, sau pot fi preluate direct de la adresa unui fișier .xml.
După ce au fost primite datele, acestea trebuie încărcate (memorate) într-un obiect DOM JavaScript.

a) Dacă datele XML sunt primite la Ajax de la un script de pe server, într-un șir text, codul de încărcare a formatului XML într-un obiect DOM JS e următorul (explicațiile necesare sunt în cod):

Cod: Selectaţi tot

 // Functie pt. incarcare continut sir XML in obiect DOM XML
 function getXML_sir(txt_xml) {
    // Daca Browser-ul este altul decat IE
    if(window.DOMParser) {
       // Creaza obiectul pt. DOM XML si retine "arborele"
       //   cu datele intr-o variabila "xmlDoc"
       getxml = new DOMParser();
       xmlDoc = getxml.parseFromString(txt_xml,"text/xml");
    }
    else {
       // Pt. Internet Explorer
       // Creaza obiectul pt. DOM XML in variabila "xmlDoc"
       xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
       xmlDoc.async="false";         // Poate fi utilizat pt.
       //   fortarea de incarcarea intai a unui fisier XML
       xmlDoc.getXML_sir(txt_xml);
    }
    return xmlDoc;
 }
 // Variabila cu datele primite de la server
 var sir_xml = 'Sirul text in care e stocat continutul XML
    primit prin ajax de la server (apelat prin GET sau POST)';
 // Se apeleaza functia "getXML_sir()" cu "sir_xml"
 var xml_dom = getXML_sir(sir_xml); 
- Internet Explorer folosește funcția "getXML_sir()" pentru a încărca șirul cu date XML într-un obiect DOM, celelalte browsere folosesc funcția "DOMParser()" cu metoda "parseFromString(sirXML,'text/xml')"
- În variabila "sir_xml" se rețin datele pe care Ajax le primește de la scriptul php, și anume, un șir text cu date în format XML.

b) - Dacă datele XML trebuie preluate direct de Ajax din "fisier.xml", se folosește obiectul "XMLHttpRequest":

Cod: Selectaţi tot

// Functia ce va prelua si incarca intr-un obiect XML DOM
 // continutul unui XML (adresa din parametru "fisier")
 function getXML_file(fisier) {
    // Daca navigatorul web suporta XMLHttpRequest
    if (window.XMLHttpRequest) {
       // Creaza variabila care va contine instanta la XMLHttpRequest
       xhttp = new XMLHttpRequest();
    }
    else {
       // Pt. IE 5/6
       xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // Defineste si trimite cererea pt. apelare "fisier"
    xhttp.open("GET", fisier ,false);
    xhttp.send(null);
    // Retine si returneaza raspunsul, transformat in XML DOM
    xmlDoc = xhttp.responseXML;
    return xmlDoc;
 }
 // Variabila cu adresa fisierului XML
 var file_xml = 'fisier.xml';
 // Se apeleaza functia "getXML_file()" cu "file_xml"
 var xml_dom = getXML_file(file_xml); 
- Proprietatea "responseXML" transformă datele obținute direct în XML DOM.
2. Parsarea documentului XML

După ce a fost preluat și transformat în XML DOM conținutul unui șir sau document XML, urmează rolul funcțiilor JavaScript care trebuie să-l parseze (parcurgă și separe), în general cu scopul de a afișa datele în pagină.
Deoarece datele din XML sunt structurate într-un format bazat pe tag-uri, se pot folosi proprietățile și metodele specifice DOM JavaScript pentru parsarea lor. Iată câteva din cele mai folosite.

Proprietăți uzuale XML DOM

childNodes - Returnează un Array secvențial cu toate nodurile incluse în cel apelat
firstChild - Returnează primul element inclus în cel apelat
nodeName - Returnează numele nodului apelat (denumirea atributului sau tag-ului XML)
nodeValue - Obține valoarea text din acel nod
attributes - Returnează un Array secvențial cu toate atributele din acel nod

Metode uzuale DOM

getElementsByTagName(nume) - Obține într-un Array toate elementele (tag-uri) "nume"
appendChild(node) - Adaugă un nou element nod (node) în cel curent
removeChild(node) - Șterge elementul nod, specificat la "node", din cel curent
getNamedItem(nume) - Preia ca element nod atributul "nume", din cel apelat
getAttribute('nume') - Returnează valoarea atributului "nume" din nodul apelat

Utilizare proprietăți și metode DOM cu XML

În continuare vor fi prezentate câteva exemple cu aceste proprietăți și metode pentru afișarea în pagină a unor date dintr-un document XML.
Pentru aceste exemple va fi folosit următorul document XML, cu numele "fisier.xml".

- Cod fisier.xml

Cod: Selectaţi tot

<?xml version="1.0" encoding="utf-8"?>
 <cursuriweb>
    <site categorie="Programare Web">
       <url>http://www.marplo.net/php-mysql/</url>
       <descriere>Curs gratuit, scripturi si tutoriale PHP-MySQL</descriere>
    </site>
    <site categorie="Programare Web">
       <url>http://www.marplo.net/ajax/</url>
       <descriere>Curs gratuit, lectii si tutoriale Ajax</descriere>
    </site>
    <site categorie="Limbi straine">
       <url>http://www.marplo.net/engleza/</url>
       <descriere>Cursuri gratuite, exercitii si rersurse pentru invatat limba engleza</descriere>
    </site>
 </cursuriweb> 
- După ce se obțin cu Ajax datele din acest document XML și sunt transformate în obiect XML DOM (cu una din funcțiile de mai sus: "getXML_sir()" dacă sunt într-un șir text, sau cu "getXML_file" dacă sunt luate direct din fișier), se stochează acest obiect într-o variabilă, aici denumită "xml_dom". Această variabilă devine baza de aplicare a proprietăților și metodelor DOM.
Explicațiile necesare sunt în cod.

1. Exemplu cu firstChild și nodeName

Cod: Selectaţi tot

<script type="text/javascript"><!--
 // Se adauga functia "getXML_file()" sau "getXML_sir()"
 //   (in functie de modul de preluare a datelor XML
 // Aici va fi folosita "getXML_file()"
 // Se apeleaza functia "getXML_file()" cu "fisier.xml"  
 var xml_dom = getXML_file('fisier.xml');        
 // Se obtine primul element (tag-ul radacina), ce le contine pe toate celelalte
 var root = xml_dom.firstChild;        
 var tag_root = root.nodeName;         // Preia numele tagului radacina
 alert(tag_root);         // Va afisa "cursuriweb"
 //--></script> 
2. Exemplu getElementsByTagName și getAttribute()

Cod: Selectaţi tot

<script type="text/javascript"><!--
 // Se adauga functia "getXML_file()" sau "getXML_sir()"
 //   (in functie de modul de preluare a datelor XML
 // Aici va fi folosita "getXML_file()"
 // Se apeleaza functia "getXML_file()" cu "fisier.xml"  
 var xml_dom = getXML_file('fisier.xml');        
 // Obtine un Array cu toate elementele cu tag "site" din xml_dom
 var arr_sites = xml_dom.getElementsByTagName('site');        
 // Obtine valoarea atributului "categorie" din al doilea element cu tag-ul "site"
 var site2_cat = arr_sites[1].getAttribute('categorie');        
 alert(site2_cat);         // Va afisa "Programare Web"
 //--></script> 
3. Ex. cu childNodes și nodeValue

Cod: Selectaţi tot

 <script type="text/javascript"><!--
 // Se adauga functia "getXML_file()" sau "getXML_sir()"
 //   (in functie de modul de preluare a datelor XML
 // Aici va fi folosita "getXML_file()"
 // Se apeleaza functia "getXML_file()" cu "fisier.xml"  
 var xml_dom = getXML_file('fisier.xml');        
 // Preia al doilea element cu tag-ul "site" din xml_dom
 var site2 = xml_dom.getElementsByTagName('site')[1];        
 // Obtine primul element (tag) "url" din site2
 var site2_tag1 = site2.getElementsByTagName('url')[0];        
 // Preia valoarea primului nod din site2_tag1
 // (acest nod este elementul cu textul incadrat de tag-ul "url")
 // Nu ar fi functionat direct "site2_tag1.nodeValue"
 //   deoarece textul dintre tag-uri e recunoscut tot ca un nod
 var site2_tag1v = site2_tag1.childNodes[0].nodeValue;
 alert(site2_tag1v);         // Va afisa "http://www.marplo.net/ajax/"
 //--></script> 
3. Exemplu complet de parsare și afișare date din XML

În exemplul următor va fi folosit același document XML din "fisier.xml", datele din el vor fi parcurse, preluate și ordonate spre afișare într-un tabel HTML. Codul este conceput pe baza faptului că se cunoaște dinainte structura și denumirile tag-urilor și atributelor din documentul XML.

Cod: Selectaţi tot

<div id="ajax_xml">Aici e zona unde va fi afisat tabelul cu
 datele XML preluate prin Ajax</div>
 <script type="text/javascript"><!--
 // Functia Ajax ce va prelua si incarca intr-un obiect XML
 //   DOM continutul unui XML (adresa din parametru "fisier")
 function getXML_file(fisier) {
    // Daca navigatorul web suporta XMLHttpRequest
    if (window.XMLHttpRequest) {
       // Creaza variabila care va contine instanta la XMLHttpRequest
       xhttp = new XMLHttpRequest();
    }
    else {
       // Pt. IE 5/6
       xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    // Defineste si trimite cererea pt. apelare "fisier"
    xhttp.open("GET", fisier ,false);
    xhttp.send(null);
    // Retine si returneaza raspunsul, transformat in XML DOM
    xmlDoc = xhttp.responseXML;
    return xmlDoc;
 }
 // Functia ce va returna un tabel HTML cu date preluate dintr-un document XML
 function htmlTab_xml(file_xml) {
    // Variabila in care este stocat tabelul HTML cu datele ce vor fi adaugate
    var html_tab = '<table id="id_tabel" align="center" width="99%"><tr>
       <th>Categorie</th><th>Adresa Site</th><th>Descriere</th></tr>';
    var xml_dom = getXML_file(file_xml);           // Se apeleaza functia "getXML_file()" cu "file_xml"
    // Preia intr-un Array toate elementele cu tag-ul "site"
    var arr_sites = xml_dom.getElementsByTagName('site');        
    // Parcurge matricea "arr_sites"
    for(var i=0; i<arr_sites.length; i++) {
       // Obtine valoarea atributului "categorie" din tag-ul "site" parcurs  
       var site_cat = arr_sites[i].getAttribute('categorie');        
       // Preia toate elementele cu tag "url" din elementul "site" parcurs, si
       // - din primul element tag "url" obtine valoarea text din el
       var site_url = arr_sites[i].getElementsByTagName('url')[0].childNodes[0].nodeValue;
       // Preia toate elementele cu tag "descriere" din elementul "site" parcurs, si
       // - din primul element tag "descriere" obtine valoarea text din el
       var site_desc = arr_sites[i].getElementsByTagName('descriere')[0].childNodes[0].nodeValue;
       // Adauga valorile cu datele obtinute in tabelul HTML inceput in variabila "html_tab"
       // In tag-uri specifice tabelului, pt rand si coloane
       html_tab += '<tr><td>'+ site_cat+ '</td><td>'+ site_url+ '</td><td>'+ site_desc+ '</td></tr>';
    }
    html_tab += '</table>';           // Inchide tag-ul pt. tabel
    return html_tab;
 }
 var file_xml = 'fisier.xml';          // Variabila cu adresa fisierului XML
 // Adauga in tag-ul html cu id="ajax_xml" tabelul obtinut prin apelarea functiei "htmlTab_xml()"
 document.getElementById('ajax_xml').innerHTML = htmlTab_xml(file_xml);
 //-->
 </script> 

Înapoi la “Tutoriale JS”

Cine este conectat

Utilizatori răsfoind acest forum: Niciun utilizator înregistrat și 1 vizitator