Pagina de start a forumului Comunitatea JustUs  
FAQ Cautare
Membri Grupuri
Profil Mesaje private
Inregistrare Autentificare
Utilizare Ajax cu POST si PHP
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului Comunitatea JustUs Tutoriale Ajax
Subiectul anterior :: Subiectul urmator  
Autor Mesaj
Elektro_Love
Administrator
Administrator
Elektro_Love

Data inscrierii: 21/Iul/2010
Mesaje: 101

MesajTrimis: 21/07/2010 15:29    Titlul subiectului: Folosire Ajax cu POST si PHP Raspunde cu citat (quote)

Un alt mod de trimitere a unor date dintr-o pagina 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 fisierului PHP la care va fi transmisa cererea, iar "flag" este o valoare booleana true sau false (Mai multe despre aceste semnale sunt prezentate in lectiile anterioare).
Diferenta fata de GET, in trimiterea datelor prin POST, consta in 2 lucruri importante:
1. Dupa crearea cererii cu "open()" si inainte de trimiterea ei cu "send()", se apeleaza o alta metoda a obiectului "XMLHttpRequest", si anume "setRequestHeader()", întrebuințând sintaxa :
setRequestHeader("Content-type", "application/x-www-form-urlencoded")
- Aceasta trimite un Header la server care-i spune sa recunoasca datele trimise de "send()" ca si cum au fost transmise prin POST (precum sunt encodate si trimise datele din formulare). Daca acest Header nu este adaugat, serverul nu va recunoaste ca datele din parametrul lui "send()" au fost trimise prin POST.
2. Ca parametru al metodei "send()", in loc de null se adauga datele (perechile de tip indice=valoare) care trebuie trimise prin POST.

In rest, prelucrarea raspunsului primit de la server se face la fel ca in cazul apelarii cu GET.
Ca sa intelegeti mai bine cum se trimit date cu Ajax prin POST, aplicati si studiati exemplul urmator:
1. - Creati pe server un fisier PHP, de exemplu "test_post.php", in care adaugati urmatorul cod:

Citat:
<?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. Daca primeste date prin POST, cu indice 'test', preia valoarea lor in variabila "$sir" si cu "echo" afiseaza /returneaza un sir care contine valoarea string (text) primita si numarul de caractere si cuvinte din aceasta (calculate de functiile PHP specifice).

2. - Creati un fisier HTML pe server, de exemplu "ajax_post.html", in acelasi director unde este si fisierul "test_post.php", si adaugati in el codul de mai jos (studiati si comentariile din cod).

Citat:
<!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 in sectiunea HEAD un script pentru Ajax, iar in sectiunea BODY un tag <h5> întrebuințat pentru a actiona scriptul si un DIV cu un text in el.
- codul onclick="ajaxrequest('context')", din eticheta <h5> face ca la click pe ea sa fie apelata functia "ajaxrequest()", transferandu-i ca argument id-ul div-ului (din care va fi preluat continutul si apoi va fi adaugat raspunsul).
- Fata de exemplele din lectiile anterioare, aici, functia "ajaxrequest()" preia doar un singur parametru (tagID), pentru id-ul etichetei DIV. Oricum, acest aspect nu e important, depinde de fiecare cum doreste sa construiasca functiile, in acest caz important e modul de creare si trimitere a datelor la server si receptionarea raspunsului.
- Dupa ce in variabila "cerere_http" este adaugata instanta la obiectul XMLHttpRequest (prin apelarea functiei "get_XmlHttp()", care defineste acest obiect in functie de browser) am creat variabila "datele" pentru a stoca datele de tip "tex=continutul_din_div" care trebuie transmise scriptului PHP, aceasta variabila va fi folosita ca parametru al metodei "send()".
- In continuare este creata cererea cu "open()", continand tipul metodei de transfer POST si adresa, numele fisierului PHP.
- Pentru ca datele sa fie recunoscute ca au fost trimise prin POST, am adaugat cu metoda "setRequestHeader()" un Header specific, iar datele care trebuie recunoscute de scriptul PHP sunt adaugate ca parametru in "send(datele)".
- Scriptul PHP va procesa datele si dupa ce se verifica faptul ca raspunsul a fost primit complet, il afiseaza in div-ul cu id-ul precizat pentru "tagID".

Avantajul transferului prin POST este faptul ca puteti trimite un continut de date mai mare decat prin metoda GET (care este limitat la un numar de 1024 caractere); lucru important, de exemplu cand doriti sa trimiteti date adaugate in formulare.

In lectia urmatoare puteti invata cum sa folositi Ajax pentru a trimite date preluate din formulare.
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:   
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului Comunitatea JustUs Tutoriale Ajax Ora este GMT + 3 ore
Pagina 1 din 1

 
Mergi direct la:  
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
ezHyperShadow template - a boo design Original ezHyperShadow theme by boo ©2004 www.ez-life.net
Powered by phpBB © 2001, 2002 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro