0% ont trouvé ce document utile (0 vote)
33 vues10 pages

Atelier PHP AJAX : Création d'une discussion

Transféré par

HIBA BEN YEHYA
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
33 vues10 pages

Atelier PHP AJAX : Création d'une discussion

Transféré par

HIBA BEN YEHYA
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

EcolE NatioNalE SupériEurE d’artS Et MétiErS

Casablanca

Travaux Pratiques

Filière : IAGI 2 Module : Technologies web


Semestre : 7 Matière : Back-END
Date : 10 /12 / 2024

Atelier 6 : PHP AJAX


Objectif : Création d’une fenêtre de discussion

Introduction :
AJAX (Asynchronous JavaScript and XML) est une technique de développement web qui
permet de créer des pages web interactives et dynamiques. Elle permet de charger ou d'envoyer
des données à un serveur de manière asynchrone, c'est-à-dire sans avoir à recharger toute la
page. Ainsi, AJAX permet de rendre les applications web plus interactives et performantes en
facilitant les échanges de données entre le client et le serveur.

Principes clés d'AJAX :

 Asynchronisme : AJAX permet de récupérer ou d'envoyer des données en arrière-plan :


mettre à jour une partie de la page sans avoir à la recharger complètement.
 Utilisation de JavaScript : AJAX repose principalement sur JavaScript pour effectuer
des requêtes HTTP (comme GET ou POST) vers le serveur.
 Communication avec le serveur : AJAX utilise un objet appelé XMLHttpRequest
(ou Fetch API dans des implémentations plus modernes) pour envoyer des requêtes et
recevoir des réponses du serveur sans avoir besoin de recharger la page.
 Données au formats variés : AJAX peut manipuler des formats comme XML, JSON,
HTML ou même du texte brut.

Pr. L. EL Faquih A.U : 2024-2025 Page 1 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

1. Un événement se produit dans une page web (la page est chargée, un bouton est
cliqué).
2. Un objet XMLHttpRequest (XHR) est créé par JavaScript
3. L'objet XMLHttpRequest envoie une requête à un serveur web
4. Le serveur traite la demande
5. Le serveur renvoie une réponse à la page web
6. La réponse est lue par JavaScript
7. L'action appropriée (comme la mise à jour de la page) est effectuée par JavaScript.

Les méthodes de l’objet XMLHttpRequest :


Method Description
new XMLHttpRequest() Creates a new XMLHttpRequest object
abort() Cancels the current request
getAllResponseHeaders() Returns header information
getResponseHeader() Returns specific header information
Specifies the request

method: the request type GET or POST


url: the file location. The file can be any kind of file, like
.txt and .xml, or server scripting files like .asp and .php
open(method,url,async,user,psw)
(which can perform actions on the server before sending
the response back).
async: true (asynchronous) or false (synchronous)
user: optional user name
psw: optional password
Sends the request to the server
send()
Used for GET requests
Sends the request to the server.
send(string)
Used for POST requests
setRequestHeader() Adds a label/value pair to the header to be sent

Asynchronous - True or False?


Les requêtes du serveur doivent être envoyées de manière asynchrone. Le paramètre
asynchrone de la méthode open() doit être fixé à true :
xhttp.open("GET", "ajax_test.asp", true);

Grâce à l'envoi asynchrone, le JavaScript ne doit pas attendre la réponse du serveur, mais peut
au contraire

Pr. L. EL Faquih A.U : 2024-2025 Page 2 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

- exécuter d'autres scripts en attendant la réponse du serveur


- traiter la réponse une fois qu'elle est prête

Synchronous Request
Pour exécuter une requête synchrone, remplacez le troisième paramètre de la méthode open()
par false :
xhttp.open(« GET », « ajax_info.txt », false) ;
Parfois, async = false sont utilisés pour des tests rapides. Vous trouverez également des requêtes
synchrones dans des codes JavaScript plus anciens.
Puisque le code attendra que le serveur ait terminé, il n'est pas nécessaire d'avoir une fonction
onreadystatechange :
Exemple
xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;

Les propriétés de l’objet XMLHttpRequest :


Property Description
Defines a function to be called when the readyState
onreadystatechange
property changes
Holds the status of the XMLHttpRequest.
0: request not initialized
1: server connection established
readyState
2: request received
3: processing request
4: request finished and response is ready
responseText Returns the response data as a string
responseXML Returns the response data as XML data
Returns the status-number of a request
200: "OK"
status
403: "Forbidden"
404: "Not Found"
statusText Returns the status-text (e.g. "OK" or "Not Found")

Pr. L. EL Faquih A.U : 2024-2025 Page 3 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

Exemple :

<!DOCTYPE html>
<html>
<body>
<h2>Using the XMLHttpRequest Object</h2>
<div id="demo">
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</div>

<script>
function loadXMLDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML =
this.responseText;
}
};
xhttp.open("GET", "content.txt", true);
xhttp.send();
}
</script>
</body>
</html>

Explication :

La première ligne créér l’objet XMLHttpRequest object:

var xhttp = new XMLHttpRequest();

La propriété onreadystatechange spécifie une fonction à exécuter chaque fois que le statut de
l'objet XMLHttpRequest change :

xhttp.onreadystatechange = function()
Lorsque la propriété readyState vaut 4 et que la propriété status vaut 200, la réponse est
prête :
if (this.readyState == 4 && this.status == 200)

La propriété responseText renvoie la réponse du serveur sous la forme d'une chaîne de texte.
Cette chaîne de texte peut être utilisée pour mettre à jour une page web:

document.getElementById("demo").innerHTML = xhttp.responseText;

Pr. L. EL Faquih A.U : 2024-2025 Page 4 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

GET or POST?
GET est plus simple et plus rapide que POST et peut être utilisé dans la plupart des cas.

Toutefois, il convient de toujours utiliser les requêtes POST dans les cas suivants :

 Un fichier mis en cache n'est pas envisageable (mise à jour d'un fichier ou d'une base
de données sur le serveur).
 Envoi d'une grande quantité de données au serveur (POST n'a pas de limites de taille).
 Envoi d'une entrée utilisateur (qui peut contenir des caractères inconnus). POST est
plus robuste et plus sûr que GET.

Requêtes GET :
Utiliser les méthodes open() et send() de l'objet XMLHttpRequest pour envoyer une requête à
un serveur :
xhttp.open("GET", " ajax_info.txt ", true);
xhttp.send();
Pour envoyer des informations avec la méthode GET, ajouter les à l’URL :
xhttp.open("GET", "demo_get2.asp?fil=IAGI&Sname=ENSAM", true);
xhttp.send();

Requêtes POST :
Exemple :
xhttp.open("POST", "demo_post.asp", true);
xhttp.send();

Pour envoyer des données comme un formulaire HTML, ajoutez un en-tête HTTP avec
setRequestHeader(). Spécifiez les données que vous souhaitez envoyer dans la méthode send() :

xhttp.open("POST", "demo_post2.asp", true);


xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");

Pr. L. EL Faquih A.U : 2024-2025 Page 5 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

Method Description

Adds HTTP headers to the request :


setRequestHeader(header, value) header: specifies the header name
value: specifies the header value

AJAX : Réponse du Serveur

La propriété onreadystatechange
La propriété readyState contient l'état de la requête XMLHttpRequest.

La propriété onreadystatechange définit une fonction à exécuter lorsque l'état readyState


change.

Les propriétés status et statusText indiquent l'état de l'objet XMLHttpRequest.

Property Description

onreadystatechange Defines a function to be called when the readyState property changes

Holds the status of the XMLHttpRequest.


0: request not initialized
1: server connection established
readyState
2: request received
3: processing request
4: request finished and response is ready

200: "OK"
status 403: "Forbidden"
404: "Page not found"

statusText Returns the status-text (e.g. "OK" or "Not Found")

La fonction onreadystatechange est appelée chaque fois que le readyState change.


Lorsque readyState est égal à 4 et que le statut est 200, la réponse est prête :
Exemple
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {

Pr. L. EL Faquih A.U : 2024-2025 Page 6 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

document.getElementById("demo").innerHTML =
this.responseText;
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
}

Le fichier "ajax_info.txt":

<h1>AJAX</h1>
<p>AJAX is not a programming language.</p>
<p>AJAX is a technique for accessing web servers from a web page.</p>
<p>AJAX stands for Asynchronous JavaScript And XML.</p>

L'événement « onreadystatechange » est déclenché quatre fois (1-4), une fois pour chaque
changement de readyState.

Using a Callback Function


Une fonction de rappel (Callback funtcion) est une fonction passée en paramètre à une autre
fonction.

Si vous avez plus d'une tâche AJAX dans un site web, vous devez créer une fonction pour
exécuter l'objet XMLHttpRequest, et une fonction de rappel pour chaque tâche AJAX.

L'appel de fonction doit contenir l'URL et la fonction à appeler lorsque la réponse est prête.

Exemple :
loadDoc("url-1", myFunction1);

loadDoc("url-2", myFunction2);

function loadDoc(url, cFunction) {


var xhttp;
xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
cFunction(this);
}
};
xhttp.open("GET", url, true);
xhttp.send();
}

Pr. L. EL Faquih A.U : 2024-2025 Page 7 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

function myFunction1(xhttp) {
// action goes here
}
function myFunction2(xhttp) {
// action goes here
}

Server Response Properties


Property Description

responseText get the response data as a string

responseXML get the response data as XML data

Server Response Methods


Method Description

getResponseHeader() Returns specific header information from the server resource

getAllResponseHeaders() Returns all the header information from the server resource

The responseText Property


La propriété responseText renvoie la réponse du serveur sous la forme d'une chaîne
JavaScript, et vous pouvez l'utiliser en conséquence :
Example
document.getElementById("demo").innerHTML = xhttp.responseText;

The responseXML Property


L'objet XML HttpRequest possède un analyseur XML intégré.
La propriété responseXML renvoie la réponse du serveur sous la forme d'un objet DOM
XML. En utilisant cette propriété, vous pouvez analyser la réponse en tant qu'objet DOM
XML :

Pr. L. EL Faquih A.U : 2024-2025 Page 8 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

Exemple : Demander le fichier “cd_catalog.xml” et analyser la réponse :


xmlDoc = xhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i < x.length; i++) {
txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
xhttp.open("GET", "cd_catalog.xml", true);
xhttp.send();

Pr. L. EL Faquih A.U : 2024-2025 Page 9 / 10


EcolE NatioNalE SupériEurE d’artS Et MétiErS
Casablanca

Travaux Pratiques

Application :
 Créez une table Conversation contenant les colonnes (User, Message,
idMessage) où idMessage s'auto incrémente.
 Créer une page HTML contenant une fenêtre de dialogue. Cette fenêtre contient, entre
autres, un formulaire dans lequel l'utilisateur doit spécifier un nom. La zone qui
contiendra les messages doit permettre de les faire défiler si le nombre de message
déborde de la zone.
 Créer un script PHP qui reçoit avec la méthode POST les informations (User, Message)
et ajoute cette entrée dans la base de données. Ce script stocke dans la
variable $_SESSION l'identifiant du message ajouté.
 Utiliser AJAX pour appeler le script PHP qui ajoute un message dans la base de
données.
 Créer un script PHP qui renvoie la liste des messages de la base de données, triés dans
l'ordre chronologique inverse (on utilisera l'identifiant du message), et mis en forme de
la manière suivante : le nom de l'auteur apparaît dans une balise de type span, auquel on
ajoutera une classe qui permet de distinguer si l'auteur est le même que l'utilisateur
stocké dans $_SESSION ou non. Le message apparaît dans une balise de type span.
 Utiliser Jquery et AJAX (et PHP) pour récupérer à intervalle régulier (toutes les
secondes) les messages de la base de données et les place dans la fenêtre de dialogue.

Pr. L. EL Faquih A.U : 2024-2025 Page 10 / 10

Vous aimerez peut-être aussi