Author Topic:  [AJAX] Obiectul XMLHttpRequest  (Read 1222 times)

0 Members and 1 Guest are viewing this topic.

Offline ActiON_

  • Legend
  • High-Roller
  • *
  • Posts: 3187
  • Reputation: 17
  • Gender: Male
  • Real Name: Cozmiuc Alexandru Andrei
[AJAX] Obiectul XMLHttpRequest
« on: 19 June 2015, 11:49:04 »
Ajax - Obiectul XMLHttpRequest

Toate script-urile Ajax folosesc obiectul XMLHttpRequest, astfel e util sa cunoasteti elementele principale ale acestui obiect.
Scopul obiectului XMLHttpRequest este de a permite JavaScript sa formuleze cereri HTML si sa le trimita la server, dand astfel posibilitatea comunicarii cu serverul si afisarea datelor primite fara a fi necesara reincarcarea paginii, in plus, pot fi procesate in paralel mai multe conexiuni cu serverul, fara a bloca browser-ul pana la primirea raspunsului.
Inainte de a putea utiliza XMLHttpRequest, trebuie creata o instanta a acestui obiect cu formula:

Code: [Select]
var xmlHttp = new XMLHttpRequest()  ("xmlHttp" poate fi orice nume de variabila)

XMLHttpRequest este suportat de toate browserele moderne si de principalele sisteme de operare: Windows, UNIX/Linux si Mac OS; totusi, implementarea acestuia difera la unele navigatoare web. Versiuni de Internet Explorer mai mici de 7 creeaza acest obiect ca obiect de tip ActiveX. Trebuie sa tineti cont de acest aspect (destul de important) si sa creati instantatierea obiectului XMLHttpRequest in functie de browser-ul care va fi folosit, pe de o parte pentru Mozila Firefox, Opera, Safari etc. (si IE7+, care urmaresc standardul de baza) si pe de alta parte pentru Internet Explorer care, in functie de versiune, creaza obiectul ca ActiveX. Aceasta diferenta intre browsere mai complica lucrurile, dar nu e ceva dificil, pentru a crea obiectul XMLHttpRequest pentru toate navigatoarele, puteti folosi urmatoarea functie:
Code: [Select]
function get_XmlHttp() {
  // Creaza variabila care va contine instanta la XMLHttpRequest, initial cu valoare nula
  var xmlHttp = null;

  if(window.XMLHttpRequest) { // Daca browser-ul e Forefox, IE7+, Opera, Safari, ...
    xmlHttp = new XMLHttpRequest();
  }
  else if(window.ActiveXObject) { // Daca browser-ul este Internet Explorer 6 sau 5
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xmlHttp;
}

- Functia aceasta verifica daca browser-ul poate apela direct obiectul "XMLHttpRequest" sau prin "ActiveX", si in functie de aceasta, atribuie variabilei "xmlHttp" instanta la obiect, apoi returneaza valoarea acesteia.
- Dupa ce ati adaugat aceasta functie, o apelati ca valoare a unei variabile, precum in uratorul cod:

Code: [Select]
var cerere_http = get_XmlHttp();

Proprietatile si metodele obiectului XMLHttpRequest

Dupa ce a fost creata instanta la XMLHttpRequest, puteti folosi proprietatile si metodele acestui obiect. Mai jos este prezentata lista acestora.
        Proprietati:
onreadystatechange - Folosit ca un "event handler", determina care eveniment va fi apelat la schimbarea starii "readyState".
readyState - un numar intre 0 si 4 care reprezinta starea cererii ( 0 : neinitializat, 1 : incarca, 2 : incarcat (date trimise), 3 : interactiv (incep sa se primeasca date de raspuns), 4 : complet (raspuns primit complet)).
responseText - returneaza raspunsul primit de la server, in format sir text (string).
responseXML - returneaza raspunsul primit de la server in format XML.
status - codul de stare HTTP al raspunsului de la server, in format numeric (200 pt. raspuns corect, 404 pt. "Ne gasit", 500 pt. o eroare de server, etc.).
statusText - codul de stare HTTP al raspunsului de la server, in format text ("OK", "Not found", "Internal Server Error", etc.).
Metode:
abort() - Anuleaza cererea curenta
getAllResponseHeaders() - Returneaza sub forma de sir toate Header-ele HTTP primite ca raspuns
getResponseHeader(x) - Returneaza valoarea Header-ului 'x' specifat
open(method, URL, flag) - Creaza cererea care va fi trimisa.
- "metoda" defineste metoda prin care sunt trimise datele la server (GET sau POST)
- "URL" este adresa paginii /scriptului care va fi apelat, cu valorile care vor fi transmise
- "flag" este o valoare booleana true sau false. Daca este adaugat false, executia scriptului se opreste pana la primirea raspunsului de la server, daca este adaugat true, script-ul isi continua executia, astfel se pot trimite mai multe cereri simultan. Acest argument "flag" este optional, poate fi omis, in acest caz fiind considerat true.
send(content) - Trimite cererea curenta la server. Parametrul "content" indica informatia care poate fi trimisa impreuna cu datele din "open()", poate fi un sir, array, obiect XML DOM sau null si se foloseste de obicei cand datele sunt trimise prin POST. Daca trimiteti doar date prin GET si nu e nevoie sa folositi acest parametru, adaugati "null".
setRequestHeader('eticheta', 'valoare') - Perminte stabilirea de Headere care sa fie transmise la server impreuna cu cererea creata cu "open()"
Ca sa intelegeti mai bine cum se foloseste si ce face "XMLHttpRequest", iata un exemplu practic:
1. - Creati un fisier .txt cu un text simplu, de exemplu fisierul "test.txt" in care este scris un text oarecare, cum ar fi sirul "Raspunsul primit de la fisierul la care se trimite cererea.".
2. - Adaugati codul de mai jos intr-un fisier HTML, numit de exemplu "teste.html", pe care-l creati in acelasi director in care a fost creat fisierul "test.txt".

Code: [Select]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ro">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
<title>Teste XMLHttpRequest</title>

<script type="text/javascript">
<!--
// Functia care verifica si creaza obiectul XMLHttpRequest in functie de browser
function get_XmlHttp() {
  // Creaza variabila care va contine instanta la XMLHttpRequest, initial cu valoare nula
  var xmlHttp = null;

  if(window.XMLHttpRequest) { // Daca browser-ul e Forefox, Opera, Safari, ...
    xmlHttp = new XMLHttpRequest();
  }
  else if(window.ActiveXObject) { // Daca browser-ul este Internet Explorer
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xmlHttp;
}

// Functia care trimite datele la un fisier extern si returneaza raspunsul
function makerequest(serverPage, tagID) { //alert(serverPage+' - '+tagID);
  var cerere_http =  get_XmlHttp(); // Apeleaza functia pt. crearea instantei la obiectul XMLHttpRequest

  cerere_http.open("GET", serverPage); // Defineste datele pt. efectuarea cererii
  cerere_http.send(null); // Efectuiaza trimiterea datelor

  // Verifica starea cererii
  // Daca raspunsul e primit complet, il transfera in eticheta HTML cu id-ul din "tagID"
  cerere_http.onreadystatechange = function() {
    if (cerere_http.readyState == 4) {
      document.getElementById(tagID).innerHTML = cerere_http.responseText;
    }
  }
}
//-->
</script>
</head>
<body>

<h5 style="cursor:pointer;" onclick="makerequest('test.txt', 'raspuns')"><u><u>Click</u></u></h5>
<div id="raspuns">Continutul initial din tag-ul DIV</div>

</body>
</html>

- Acest cod este un document HTML care are in sectiunea HEAD, pe langa titlu, un script JavaScript care foloseste obiectul XMLHttpRequest, iar in sectiunea BODY are un tag <h5> folosit pentru a actiona scriptul JS si un DIV cu un text in el.
- Stilul style="cursor:pointer;" din tag-ul "h5" face cursorul mouse-ului sa capete aspectul de manuta (intarind ideea de buton), iar onclick="makerequest('test.txt', 'raspuns')" apelaza functia "makerequest()", transferandu-i ca argumente numele fisierului extern "test.txt" (care va fi apelat de script) si id-ul div-ului (in care va fi adaugat raspunsul).
- Partea importanta este functia "makerequest()", aceasta preia doi parametri, primul pentru numele fisierului la care va face apelul iar al doile reprezinta id-ul etichetei HTML in care va fi afisat raspunsul.
- La inceput se creaza, in variabila "cerere_http", instanta la obiectul XMLHttpRequest, prin apelarea functiei "get_XmlHttp()", care defineste acest obiect in functie de browser. Apoi, folosind metoda "open()" la instanta acestui obiect (adica cerere_http.open()), se creaza cererea care cuprinde datele acesteia (metoda de trimitere a datelor, GET, si numele fisierului care va fi apelat). Al treilea argument, care poate fi "true" sau "false", este optional si nu l-am mai adaugat.
- Dupa aceasta se foloseste metoda "send(null)" care trimite cererea.
- Apoi, cu proprietatea "onreadystatechange", se verifica starea cererii si cand raspunsul este primit complet (readyState == 4) va fi transferat, prin proprietatea "responseText" si obiectul "getElementById()", in eticheta HTML care are id-ul din "tagID".
- Functia "makerequest()" apeleaza fisierul "test.txt" ca si cum acesta ar fi fost deschis intr-o fereastra a browser-ului. Raspunsul primit de acesta, si anume datele pe care le-ar fi afisat in browser (in acest caz, continutul fisierului), sunt primite "in ascuns", fara a deschide vreo fereastra, si stocate in "cerere_http.responseText", care apoi pot fi prelucrate de scriptul JavaScript dupa cum dorim.

Daca, de exemplu, fisierele sunt pe un server si doriti sa preluati starea raspunsului primit de la server (adica "OK", Pagina negasita, Eroare de server, sau alte erori), puteti folosi, dupa "send()" (recomandat in cadrul operatiilor dupa "readyState") una din proprietatile: status sau statusText.
Pentru a vedea cum functioneaza, aplicati la exemplul prezentat mai sus, in cadrul acoladei   if (cerere_http.readyState == 4) { ... }, urmatoarea expresie:

Code: [Select]
alert(cerere_http.status+' - '+cerere_http.statusText);

Sursa: marplo.net


Ai vreo problema/nelamurire in legatura cu forumul nostru? Citeste acest topic si daca nu ai gasit raspunsul potrivit, da un reply!

Offline s l a m

  • T I T A N I U M
  • Legend
  • God
  • *
  • Posts: 8920
  • Reputation: 27
  • Gender: Male
  • T I T A N I U M
  • Steam ID: slamsg
Re: [AJAX] Obiectul XMLHttpRequest
« Reply #1 on: 19 June 2015, 13:17:20 »
Bun tutorialul dar

Ce treaba are Ajax cu HTML-ul ? XD

· ,.-~*’¨¯¨’*·~-.¸-(_S L A M_)-,.-~*’¨¯¨’*·~-.¸

Legends never die





http://slam-official.tumblr.com/
http://www.youtube.com/user/DeepWyNN


FH3 - FH4 - FH5 player




· ,.-~*’¨¯¨’*·~-.¸-(_S L A M_)-,.-~*’¨¯¨’*·~-.¸


Offline ActiON_

  • Legend
  • High-Roller
  • *
  • Posts: 3187
  • Reputation: 17
  • Gender: Male
  • Real Name: Cozmiuc Alexandru Andrei
Re: [AJAX] Obiectul XMLHttpRequest
« Reply #2 on: 19 June 2015, 13:37:52 »
Ajax se bazeaza si foloseste HTML. Practic, exista o relatie intre cele doua limbaje de programare.
Pe deasupra, nu exista un board dedicat acestui limbaj.


Ai vreo problema/nelamurire in legatura cu forumul nostru? Citeste acest topic si daca nu ai gasit raspunsul potrivit, da un reply!

Offline IstuntmanI

  • GZS Owner
  • Administrator
  • Cyborg
  • *
  • Posts: 15119
  • Reputation: 80
  • Gender: Male
  • Real Name: NcF http://fb.me/cnistor96
  • Steam ID: istuntmani
Re: [AJAX] Obiectul XMLHttpRequest
« Reply #3 on: 19 June 2015, 16:17:35 »
Aceste limbaje incluse in HTML sunt destul de multe, daca stii cat mai multe poti face niste pagini fenomenale, pacat ca e mult prea mult de invatat. :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal