[Tutorial JS] Utilizare Ajax cu POST si PHP

#1
Nume Tutorial: Utilizare Ajax cu POST si PHP
Descriere: Utilizare Ajax cu POST si PHP
Download:
Autor: Anonim
Sursa (Link-ul oficial):
tutorialeonline
Propria parere: Folositor.
Tutorialul:

Un alt mod de trimitere a unor date dintr-o pagină web la server este prin metoda POST.
Cu Ajax, cererea pentru trimiterea datelor cu POST se face tot prin metoda "open()" a obiectului "XMLHttpRequest", sintaxa acesteia fiind open("POST", url, flag), unde "POST" este metoda de transfer, "url" este adresa fişierului PHP la care va fi transmisă cererea, iar "flag" este o valoare booleană true sau false (Mai multe despre aceste atribute sunt prezentate în lecţiile anterioare).
Diferenţa faţă de GET, în trimiterea datelor prin POST, constă în 2 lucruri importante:

1. După crearea cererii cu "open()" şi înainte de trimiterea ei cu "send()", se apelează o altă metodă a obiectului "XMLHttpRequest", şi anume "setRequestHeader()", folosind sintaxa :

setRequestHeader("Content-type", "application/x-www-form-urlencoded")

- Aceasta trimite un Header la server care-i spune să recunoască datele trimise de "send()" ca şi cum au fost transmise prin POST (precum sunt encodate şi trimise datele din formulare). Dacă acest Header nu este adăugat, serverul nu va recunoaşte că datele din parametrul lui "send()" au fost trimise prin POST.

2. Ca parametru al metodei "send()", în loc de null se adaugă datele (perechile de tip indice=valoare) care trebuie trimise prin POST.

În rest, prelucrarea răspunsului primit de la server se face la fel ca în cazul apelării cu GET.
Ca să înţelegeţi mai bine cum se trimit date cu Ajax prin POST, aplicaţi şi studiaţi exemplul următor:

1. - Creaţi pe server un fişier PHP, de exemplu "test_post.php", în care adăugaţi următorul cod:

Cod: Selectaţi tot

<?php
 / Daca sunt primite date prin POST, cu indice 'test'
 if (isset($_POST['test'])) {
    $sir = $_POST['test'];             // Preia datele primite
    echo 'Textul "<i>'.$sir.'"</i> contine '. strlen($sir). ' caractere si '.
    str_word_count($sir, 0). ' cuvinte.';
 }
 ?> 
- Acesta e un script PHP relativ simplu. Dacă primeşte date prin POST, cu indice 'test', preia valoarea lor în variabila "$sir" şi cu "echo" afişează /returnează un şir care conţine valoarea string (text) primită şi numărul de caractere şi cuvinte din aceasta (calculate de funcţiile PHP specifice).

2. - Creaţi un fişier HTML pe server, de exemplu "ajax_post.html", în acelaşi director unde este şi fişierul "test_post.php", şi adăugaţi în el codul de mai jos (studiaţi şi comentariile din cod).

Cod: Selectaţi tot

<!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>Exemplu Ajax POST</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 PHP si returneaza raspunsul
       function ajaxrequest(tagID) {
          var cerere_http =  get_XmlHttp();        // Apeleaza functia pt.
             //crearea instantei la obiectul XMLHttpRequest
 
          // Creaza datele care trebuie trimise prin POST la scriptul PHP (perechi nume=valoare)
          var  datele = 'test='+document.getElementById(tagID).innerHTML;
 
          cerere_http.open("POST", 'test_post.php', true);            // Creaza cererea
 
          // Adauga un Header specific pentru ca datele sa fie recunoscute ca
          //au fost trimise prin POST
          cerere_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          cerere_http.send(datele);        // Efectueaza trimiterea cererii,
          //impreuna cu valorile care trebuie transmise
 
          // 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="ajaxrequest('context')">Click</h5>
    <div id="context">Sir transmis cu Ajax, prin POST, la server si prelucrat cu PHP</div>
 
 </body>
 </html> 
- Aici este un document HTML ce are în secţiunea HEAD un script pentru Ajax, iar în secţiunea BODY un tag <h5> folosit pentru a acţiona scriptul şi un DIV cu un text în el.
- codul onclick="ajaxrequest('context')", din eticheta <h5> face ca la click pe ea să fie apelată funcţia "ajaxrequest()", transferându-i ca argument id-ul div-ului (din care va fi preluat conţinutul şi apoi va fi adăugat răspunsul).
- Faţă de exemplele din lecţiile anterioare, aici, funcţia "ajaxrequest()" preia doar un singur parametru (tagID), pentru id-ul etichetei DIV. Oricum, acest aspect nu e important, depinde de fiecare cum doreşte să construiască funcţiile, în acest caz important e modul de creare şi trimitere a datelor la server şi recepţionarea răspunsului.
- După ce în variabila "cerere_http" este adăugată instanţa la obiectul XMLHttpRequest (prin apelarea funcţiei "get_XmlHttp()", care defineşte acest obiect în funcţie de browser) am creat variabila "datele" pentru a stoca datele de tip "tex=continutul_din_div" care trebuie transmise scriptului PHP, această variabilă va fi folosită ca parametru al metodei "send()".
- În continuare este creată cererea cu "open()", conţinând tipul metodei de transfer POST şi adresa, numele fişierului PHP.
- Pentru ca datele să fie recunoscute că au fost trimise prin POST, am adăugat cu metoda "setRequestHeader()" un Header specific, iar datele care trebuie recunoscute de scriptul PHP sunt adăugate ca parametru în "send(datele)".
- Scriptul PHP va procesa datele şi după ce se verifică faptul că raspunsul a fost primit complet, îl afişează în div-ul cu id-ul precizat pentru "tagID" .

Avantajul transferului prin POST este faptul că puteţi trimite un conţinut de date mai mare decât prin metoda GET (care este limitat la un număr de 1024 caractere); lucru important, de exemplu când doriţi să trimiteţi date adăugate în formulare.

Înapoi la “Tutoriale JS”

Cine este conectat

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