Académique Documents
Professionnel Documents
Culture Documents
Dr N. BAME
Dr N. BAME 1
Introduction
• AJAX est l'acronyme d'Asynchronous Javascript and
XML
• permet d’exécuter des requêtes HTTP sans pour autant
avoir à recharger la page qui l’exécute.
– Offre la possibilité d’exécuter des requêtes HTTP à partir de
pages HTML sans avoir à les recharger
Dr N. BAME 4
Formats des données
• AJAX est un ensemble de technologies visant à effectuer des
transferts de données.
• Les données doivent être structurées. Il existe de nombreux
formats pour transférer des données :
format texte : aucune structure prédéfinie. Il sert essentiellement à
transmettre une phrase à afficher à l'utilisateur, comme un message
d'erreur ou autre.
HTML : permet de transférer facilement des données. Généralement, il
a pour but d'acheminer des données qui sont déjà formatées par le
serveur puis affichées directement dans la page sans aucun traitement
préalable de la part du Javascript.
XML : acronyme de eXtensible Markup Language. Il permet de stocker
les données dans un langage de balisage semblable au HTML. Il est très
pratique pour stocker de nombreuses données ayant besoin d'être
formatées, tout en fournissant un moyen simple d'y accéder.
JSON : acronyme de JavaScript Object Notation. Il a pour particularité
de segmenter les données dans un objet Javascript, il est très
avantageux pour de petits transferts de données segmentées et est de
plus en plus utilisé dans de très nombreux langages.
Dr N. BAME 5
Formats texte et HTML
• Il est possible de recevoir directement des blocs de
code HTML,
– notamment pour rafraîchir une partie d’une page Web.
Dr N. BAME 6
Formats texte et HTML
• Acronyme de eXtensible Markup Language.
Dr N. BAME 8
Format JSON
• Le format JSON permet de représenter des objets
littéraux JavaScript. L’utilisation de ce format est
particulièrement intéressante pour les réponses.
Dr N. BAME 10
XMLHttpRequest
• Ajax se fonde essentiellement sur la classe
XMLHttpRequest : entité de base permettant de
mettre en œuvre Ajax dans un navigateur Web.
Dr N. BAME 11
Attributs de la classe XMLHttpRequest
Attribut Description
Dr N. BAME 13
Méthodes de la classe XMLHttpRequest
Méthode Paramètre Description
Dr N. BAME 15
Echange de données
1. Préparation et envoi de la requête
2. Réception des données.
Dr N. BAME 16
Préparation et envoi de la requête
1. instancier un objet XHR
var xhr = new XMLHttpRequest();
2. préparer la requête : méthode open()
Cinq paramètres dont 3 sont facultatifs
1. Méthode d’envoi des données : GET, POST, HEAD
2. URL à laquelle on souhaite soumettre la requête,
3. booléen facultatif dont la valeur par défaut est true : à true, la
requête sera de type asynchrone, à false elle sera synchrone
4. en cas d'identification nécessaire, nom de l'utilisateur
5. en cas d'identification nécessaire, mot de passe
Exemple
xhr.open('GET', 'http://mon_site.sn/ajax.php');
3. Envoyer la requête : méthode send()
xhr.send(null);
Dr N. BAME 17
Préparation et envoi de la requête
methode open()
• Méthode d’envoi des données
– GET, POST : mêmes fonctionnement qu’avec les
formulaires
• Il est conseillé d'encoder toutes les valeurs que l’on passe en
paramètre grâce à la fonction encodeURIComponent(), afin
d'éviter d'écrire d'éventuels caractères interdits dans une URL :
value1 = encodeURIComponent(value1),
value2 = encodeURIComponent(value2);
xhr.open('GET', 'http://mon_site.sn/ajax.php?param1=' + value1
+ '¶m2=' + value2);
Dr N. BAME 18
Préparation et envoi de la requête
• methode open()
– Avec la méthode POST, les paramètres ne sont pas à spécifier avec
la méthode open() mais avec la méthode send()
– la méthode POST consiste généralement à envoyer des valeurs
contenues dans un formulaire,
• il faut donc modifier les en-têtes d'envoi des données afin de préciser qu'il
s'agit de données provenant d'un formulaire (même si, à la base, ce n'est
pas le cas) :
Dr N. BAME 20
Préparation et envoi de la requête
Synchrone ou asynchrone
• Une requête synchrone va bloquer le script tant
que la réponse n'aura pas été obtenue, tandis
qu'une requête asynchrone laissera continuer
l'exécution du script et préviendra de l'obtention
de la réponse par le biais d'un événement.
...
}
Dr N. BAME 23
Exemple : POST
function afficherMessagePost(msgValue)
{
var url='testAjax.php';
var xhr=new XMLHttpRequest();
xhr.open(‘POST',url);
xhr.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
xhr.send("msg="+msgValue);
...
}
Dr N. BAME 24
Réception des données
• La réception des données d'une requête se fait par le
biais de nombreuses propriétés.
– Cependant, les propriétés à utiliser diffèrent selon que la
requête est synchrone ou non.
Dr N. BAME 26
Réception des données
• L'utilisation de la propriété readyState est
nécessaire pour connaître l'état de la requête.
• Il existe deux manières pour vérifier que la
propriété readyState contient bien une valeur
indiquant que la requête est terminée.
• La première consiste à utiliser la constante elle-
même :
xhr.onreadystatechange = function() {
if (xhr.readyState == xhr.DONE) { // La constante DONE
appartient à l'objet XMLHttpRequest, elle n'est pas globale
// Votre code…
}
}; Dr N. BAME 27
Réception des données
• la deuxième manière de faire, qui est la plus
courante, consiste à utiliser directement la valeur
de la constante, soit 4 pour la constante DONE:
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// Votre code…
}
};
Dr N. BAME 28
Réception des données
• Même si la requête a terminé son travail, cela ne veut pas
forcément dire qu'elle l'a mené à bien, pour cela nous allons
devoir consulter le statut de la requête grâce à la propriété
status.
• Cette dernière renvoie le code correspondant à son statut,
comme le fameux 404 pour les fichiers non trouvés.
• Le statut qui nous intéresse est le 200, qui signifie que tout
s'est bien passé :
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// Votre code…
}
};
• À noter qu'il existe aussi une propriété nommée statusText
contenant une version au format texte du statut de la
requête, en anglais seulement. Par exemple, un statut 404
vous donnera le texte suivant : « Not Found ».
Dr N. BAME 29
Traitement des données
• Une fois la requête terminée, il faut récupérer les
données obtenues. Ici, deux possibilités s'offrent :
1. Les données sont au format XML, on peut alors utiliser
la propriété responseXML, qui permet de parcourir
l'arbre DOM des données reçues.
2. Les données sont dans un format autre que le XML, il
faut alors utiliser la propriété responseText, qui fournit
toutes les données sous forme d'une chaîne de
caractères.
• C'est au développeur qu'incombe la tâche de faire
d'éventuelles conversions, par exemple avec un
objet JSON :
var response = JSON.parse(xhr.responseText);.
Dr N. BAME 30
Traitement des données
• Les deux propriétés nécessaires à l'obtention des
données sont responseText et responseXML.
Dr N. BAME 31
JSON
• Comme l'indique son nom (JavaScript Object Notation), il 'agit
d'une représentation des données sous forme d'objet
Javascript.
Dr N. BAME 34
Traitement des données
• vous pouvez récupérer toutes les balises <cel> de la
manière suivante :
var cels = xhr.responseXML.getElementsByTagName('cel');
Dr N. BAME 35
Récupération des en-têtes de la réponse
• Il se peut que vous ayez parfois besoin de récupérer
les valeurs des en-têtes fournis avec la réponse de
votre requête.
• Pour cela, on peut utiliser deux méthodes :
– getAllResponseHeaders() : retourne tous les en-têtes de
la réponse en vrac.
Dr N. BAME 36
Récupération des en-têtes de la réponse
• getResponseHeader(), permet la récupération d'un
seul en-tête.
• Il suffit d'en spécifier le nom en paramètre et la
méthode retournera sa valeur :
Dr N. BAME 37
Exercice
Dr N. BAME 38
L'objet FormData
• Cet objet consiste à faciliter l'envoi des données par le
biais de la méthode POST des requêtes XHR.
Dr N. BAME 42
L'objet FormData
• Le constructeur de cet objet possède un argument
bien pratique :
– On peut donc passer en paramètre un élément de
formulaire et l’objet FormData sera alors prérempli avec
toutes les valeurs du formulaire.
Dr N. BAME 43
L'objet FormData
Dr N. BAME 44