SlideShare une entreprise Scribd logo
Requêtes HTTP
synchrones & asynchrones
Avril 2018Abdoulaye Dieng 1
Objectifs généraux
• Savoir effectuer une requête HTTP synchrone ou
asynchrone
• Savoir effectuer des requêtes RESTful avec les
méthodes GET, POST, PUT, PATCH et DELETE
2
Objectifs opérationnels
• Comprendre une requête synchrone
• Effectuer une requête synchrone
• Lire, d’une manière synchrone, le contenu d’un fichier
local
• Comprendre une requête asynchrone
• Effectuer une requête asynchrone
• Récupérer des données à partir d’un serveur avec une
requête asynchrone
• Comprendre les méthodes de requête RESTful
• Effectuer des requêtes RESTful avec les méthodes GET,
POST, PUT, PATCH et DELETE
3
Sommaire
1) Requête synchrone
2) Requête asynchrone
3) Objet XMLHttpRequest
4) Requêtes HTTP et jQuery
5) Méthodes de requête HTTP
4
Requête synchrone
• Requête synchrone = requête où le navigateur est bloqué durant
l’attente de la réponse
• Exemples
 Clic sur un lien hypertexte
 Soumission d’un formulaire
• Inconvénient : caractère bloquant qui peut figer un navigateur et
entamer l’expérience utilisateur
5
Requête asynchrone
• Requête asynchrone = requête où le navigateur peut s’occuper
sur une autre tâche durant l’attente de la réponse
• Exemples
 Recharge partielle d’une page
 Soumission de données
• Avantages
 moins de latence
 applications plus réactives
 moins de trafic réseau
 moins de charge sur le serveur
• Inconvénient : flot d’exécution non linéaire => difficulté à
programmer /debugger
6
Objet XMLHttpRequest
présentation
• XMLHttpRequest : objet JavaScript permettant de faire des
requêtes HTTP asynchrone et synchrone.
• Élément fondamental de la technologie AJAX (Asynchronous
JavaScript And XML)
• Initialement développé par MicroSoft (en 1998), en tant
qu’objet ActiveX, pour Outlook Web Access via IE 5.0
• Ajouté ensuite à ECMAScript et implémenté en tant qu’objet
JavaScript par les autres navigateurs à partir de 2002.
• Son instanciation se fait différemment selon le navigateur
• Toutefois, ses propriétés et méthodes sont les mêmes pour
tous les navigateurs.
7
Objet XMLHttpRequest
quelques propriétés
• readyState : état de l’objet XHR au cours de la requête
0 : non initialisé, 1 : requête en cours d’envoi,
2 : requête envoyée, 3 : réponse en cours de réception,
4 : complétude de la réponse
• onreadystatechange : contient le gestionnaire d’évènement à
appeler à chaque changement de readyState.
• responseText : réponse du serveur sous format chaîne de
caractères.
• responseXML : réponse du serveur sous format XML.
• status : code de la réponse HTTP reçue depuis le serveur.
• statusText : libellé du code de la réponse HTTP reçue depuis le
serveur.
8
Objet XMLHttpRequest
quelques méthodes
• open(requestMethod, url, asynchronousFlag) : prépare
l’envoi de la requête
• send(bodyContent) : envoie le corps du message
(éventuellement null par exemple lors de l’exploitation de la
méthode GET)
• setRequestHeader(headerField, headerValue) : ajoute
une paire champ/valeur à l’en-tête lors de l’envoi de la
requête
• abort() : stoppe la requête et réinitialise la valeur de
readyState à 0
9
Objet XMLHttpRequest
étapes de lancement d’une requête
1) Évènement déclencheur
2) Instanciation de l’objet
XMLHttpRequest
3) Envoi de la requête HTTP
4) Traitement de la requête
5) Réponse du serveur
6) Traitement de la réponse
10
1
2
3
4
5
6
Objet XMLHttpRequest
Création d’un déclencheur et d’une zone d’affichage de la réponse
Cette étape consiste à la création d’une page HTML intégrant :
• un déclencheur (un lien, bouton ou n'importe quel contrôle que
l'utilisateur peut manipuler pour lancer une action).
Exemple
• une zone où sera affichée la réponse de l'action de l’utilisateur.
Exemple
<p> Entrez un entier SVP : <input type="number" >
</p>
<p> <button> pair ou impair ? <button/> </p>
<p id="resultat"> ... </p>
11
Objet XMLHttpRequest
Création d’un déclencheur et d’une zone d’affichage de la réponse
TP
1) Créez le sous-répertoire tps-sync-async-req dans le Webroot
de votre serveur Web
2) Dans tps-sync-async-req, créez le sous-réperoire js et le
fichier entier.html contenant
<script src="js/instancierXHR.js" ></script>
<p>
Entrez un entier SVP : <input type="number" >
</p>
<p>
<button> pair ou impair ? </button>
</p>
<p id="resultat"> ... </p>
<script src="js/entier.js"></script>
12
Objet XMLHttpRequest
instanciation
function instancierXHR() {
var resultat=null;
try { // Test pour Chrome, Mozilla, Opera, ...
resultat= new XMLHttpRequest();
}
catch (Error) {
try { // Test pour les navigateurs Internet Explorer > 5.0
resultat= new ActiveXObject("Msxml2.XMLHTTP");
}
catch (Error) {
try { // Test pour le navigateur Internet Explorer 5.0
resultat= new ActiveXObject("Microsoft.XMLHTTP");
}
catch (Error) {
resultat= null;
}
}
}
return resultat;
}
L’objet XMLHttpRequest est créé par l’instruction:
var objetXHR = instancierXHR()
13
Objet XMLHttpRequest
instanciation - TP
1. Dans le sous-dossier js créez les fichiers
a) instancierXHR.js contenant le code JS de la diapo
précédente
b) entier.js et lire-fichier-local-en-sync.js contenant tous
les deux le code :
var objetXHR = instancierXHR();
…
2. Dans le sous-dossier tps-sync-async-req créez le fichier
contact.txt contenant
Nom Prénom Tel
Dia Alpha 771234568
14
Objet XMLHttpRequest
désignation de la fonction de rappel (mode asynchrone)
• La fonction de rappel (ou callback) devra être appelée à
chaque fois que l’état de l’objet XMLHttpRequest change
(requête en cours d’envoi, requête envoyée, réponse en cours
de réception, complétude de la réponse).
• Pour cela, on renseigne la propriété onreadystatechange de
l'objet.
Par exemple :
objetXHR.onreadystatechange = actualiserPage;
• Cette fonction n’est nécessaire qu’en mode asynchrone et est
surtout utilisée pour le traitement de la réponse complète du
serveur
15
Objet XMLHttpRequest
désignation de la fonction de rappel - TP
Ajoutez au fichier entier.js le code :
var bouton = document.querySelector("button");
bouton.addEventListener("click", function() {
objetXHR.onreadystatechange = actualiserPage;
…
}
)
16
Objet XMLHttpRequest
initialisation de la requête
• La requête est initialisée par la méthode open() qui reçoit :
 la méthode d’envoi (GET, POST, PUT, DELETE, …) ;
 l'adresse du fichier cible, ainsi qu’éventuellement, la liste
des paramètres à passer à celui-ci, dans le cas où la
requête est effectuée en mode GET ;
 false(synchrone) ou true (asynchrone : mode par défaut).
• Exemple avec POST :
objetXHR.open("post", "parite.php", true);
• Exemple avec GET :
var entier=document.querySelector("input").value;
objetXHR.open("get", "parite.php?entier="+entier, true);
• Exemple : ouverture d’un fichier local en mode synchrone
objetXHR.open('GET', './contact.txt', false);
17
Objet XMLHttpRequest
initialisation de la requête - TP
1. Ajoutez au fichier entier.js le code
objetXHR.open("post", "./parite.php");
…
2. Ajoutez au fichier lire-fichier-local-en-sync.js le code
objetXHR.open("get", "./contact.txt", false);
…
18
Objet XMLHttpRequest
envoi de la requête
• La requête est envoyée par la méthode send() qui reçoit :
 ou bien NULL si la méthode d’envoi est GET ;
 ou bien la liste des paramètres à passer au programme
chargé de traiter la requête, si la méthode d’envoi est
POST, PUT ou DELETE.
• Exemple avec GET :
objetXHR.send(null);
• Exemple avec POST :
var entier=document.querySelector("input").value;
objetXHR.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
objetXHR.send("entier="+entier);
19
Objet XMLHttpRequest
envoi de la requête - TP
1. Ajoutez au fichier entier.js le code
var entier = document.querySelector("input").value;
objetXHR.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
objetXHR.send("entier="+entier);
2. Ajoutez au fichier lire-fichier-local-en-sync.js le code
objetXHR.send(null);
…
20
Objet XMLHttpRequest
traitement de la requête par le serveur
• La requête peut être traitée par un script .php
• Exemple : (parite.php dans tps-sync-async-req)
<?php
header("Content-Type: text/plain");//la réponse est du
texte
if(!empty($_REQUEST["entier"])){
$entier = $_REQUEST["entier"];
if($entier%2==0){
echo $entier.' est pair';
}else{
echo $entier.' est impair';
}
}else{
echo "Aucune donnée reçue";
}
21
Objet XMLHttpRequest
traitement de la réponse par le navigateur
• Réponse traitée grâce à l’une des propriétés responseText et
responseXML
• Dans le corps de la fonction de rappel en mode asynchrone.
• Exemple
function actualiserPage() {
if (objetXHR.readyState == 4) {
if (objetXHR.status == 200) {
var resultat=
document.getElementById("resultat");
resultat.innerHTML=objetXHR.responseText;
}
}
}
• Exemple : ouverture d’un fichier local en mode synchrone
console.log(objetXHR.responseText); 22
Objet XMLHttpRequest
traitement de la réponse - TP
1. Ajoutez au fichier entier.js le code
function actualiserPage() {
if (objetXHR.readyState == 4) {
if (objetXHR.status == 200) {
var resultat=
document.getElementById("resultat");
resultat.innerHTML=objetXHR.responseText;
}
}
}
2. Ajoutez au fichier lire-fichier-local-en-sync.js le code
console.log(objetXHR.responseText);
23
Requêtes HTTP et jQuery
méthode $.ajax()
• jQuery: bibliothèque javascript open-source et cross-browser
permettant, entre autres, de manipuler le DOM et de simplifier le
dialogue client/serveur
• Méthode $.ajax()
 Reçoit des options sous la forme {clef1:val1, clef2:val2, …}
 Envoie une requête asynchrone par défaut
 Retourne l'objet jqXHR (sur-ensemble de XMLHttpRequest)
contenant les infos sur la requête et sa réponse
 Principales clefs des options
• url:"URL_cible", URL du script qui reçoit la requête
• method:"GET"|"POST"|"PUT"|"DELETE", méthode
HTTP
• data:{key1:value1, key2:value2, …}, données à envoyer
• dataType:"text"|"html"|"json"|"xml"|… , type de données
attendu
24
Requêtes HTTP et jQuery
méthodes .done() et .fail() de l’objet jqXHR
• Méthodes alternatives et différées
• .done() reçoit la fonction de rappel à exécuter en cas de succès
de la requête et retourne l’objet jqXHR (=> chaînabilité)
• La callback reçoit la réponse puis une chaîne (« success »)
indiquant l’état de l’opération et enfin l’objet jqXHR
• .fail() reçoit la fonction de rappel à exécuter en cas d’échec de la
requête et retourne l’objet jqXHR
• La callback reçoit l’objet jqXHR puis une chaîne (« timeout », «
error », « abort » ou « parsererror ») indiquant l’état de
l’opération et enfin un texte (« Not Found », « Internal Server
Error ») donnant l'information sur l'erreur.
25
Requêtes HTTP et jQuery
exemple : Récupérer des données distantes
• Télécharger la biblio. jquery à partir de http://jquery.com/download/
• Dans le Webroot d’un serveur, créez le sous-rep exemple-asyn qui
contiendra les fichiers hello.html et fetch-remote-data.html
• Contenu de hello.html : <p>hello front-end !!!</p>
• Contenu de fetch-remote-data.html
<script src="chemin/vers/jquery.js"></script>
<script>
$.ajax({ url: "http://localhost/jquery-backend/hello.html",
dataType:"html" })
.done(function(data) { alert("Données reçues : "+data); })
.fail(function(jqXHR, textStatus,errorThrown) {
alert( "Echec de la requete");
console.log( "Error: " + errorThrown );
console.log( "Status: " + textStatus ); console.dir( jqXHR );
});
</script>
• Tester .fail() en modifiant les valeurs de url et de dataType
26
Méthodes de requête HTTP
présentation
• Méthode de requête indiquent l'action que l'on souhaite réaliser
sur la ressource demandée
• Quelques méthodes (ou verbes) HTTP
 GET : adaptée pour récupérer des données
 POST : adaptée pour envoyer des données
 PUT : adaptée pour remplacer entièrement des données
 DELETE : adaptée pour supprimer des données
 PATCH : adaptée pour remplacer partiellement des données
27
Méthodes de requête HTTP
outils des travaux pratiques
• Téléchargez et installez npm à travers NodeJS
https://nodejs.org/en/download/current/
• Installez le serveur REST factice : JSON server
npm install –g json-server
• Installez un client REST sous forme d’une extension navigateur
Postman, Advanced Rest Client ou un autre
• Démarrez JSON server
json-server --watch db.json
• NB : db.json est un fichier texte contenant les données au
format JSON. Vous pouvez créer votre propre fichier et
l’indiquer à JSON server lors de son démarrage
28
Méthodes de requête HTTP
Travaux pratiques
Avec le client REST, requêtez l’URL http://localhost:3000/ suffixée
d’une des routes suivantes :
1) GET /posts
2) POST /posts avec deux posts à ajouter
3) GET /posts/2
4) PUT /posts/2 avec les modifications
5) PATCH /posts/3 avec les modifications partielles
6) DELETE /posts/3
29

Contenu connexe

PDF
SDN OpenDaylight
Mokhless Hachicha
 
PPTX
Cours 70 410-1
Mohamed Diallo
 
PPTX
Introduction à spring boot
Antoine Rey
 
PDF
Alphorm.com Formation Hacking et Sécurité , avancé
Alphorm
 
PPT
Mise en Forme des Résultats avec SQL*Plus
webreaker
 
PDF
DHCP sous fedora
Souhaib El
 
PDF
QCM informatique de base
Frust Rados
 
PDF
Tp2 - WS avec JAXRS
Lilia Sfaxi
 
SDN OpenDaylight
Mokhless Hachicha
 
Cours 70 410-1
Mohamed Diallo
 
Introduction à spring boot
Antoine Rey
 
Alphorm.com Formation Hacking et Sécurité , avancé
Alphorm
 
Mise en Forme des Résultats avec SQL*Plus
webreaker
 
DHCP sous fedora
Souhaib El
 
QCM informatique de base
Frust Rados
 
Tp2 - WS avec JAXRS
Lilia Sfaxi
 

Tendances (20)

PDF
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
ENSET, Université Hassan II Casablanca
 
PDF
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
 
PPTX
Architectures n-tiers
Heithem Abbes
 
PDF
Rapport de stage développement informatique
MehdiOuqas
 
PDF
qcm développement informatique
beware_17
 
PDF
Support de cours angular
ENSET, Université Hassan II Casablanca
 
PPTX
RADIUS ET TACACS+.pptx
ZokomElie
 
PDF
Complete Java Course
Lhouceine OUHAMZA
 
PDF
Telecharger Exercices corrigés PL/SQL
webreaker
 
PDF
T1 corrections-qcm
infcom
 
PDF
Methodes d'accès dans les réseaux locaux
Ines Kechiche
 
PDF
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
PPSX
Cours Génie Logiciel - Introduction
Mohammed Amine Mostefai
 
PDF
TD_complet_reseau__CISCO__Packet Tracer.pdf
Ines Ben Hassine
 
PPTX
Conception et réalisation du module agenda partagé pour une solution de télés...
Toufik Atba
 
PDF
Mise en oeuvre des framework de machines et deep learning v1
ENSET, Université Hassan II Casablanca
 
PDF
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Addi Ait-Mlouk
 
PPTX
gestion de magasin vente matériels informatique
Oussama Yoshiki
 
DOCX
Mini projet individuel php
Khadim Mbacké
 
PDF
Rapport application chat
Tbatou sanae
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
ENSET, Université Hassan II Casablanca
 
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
 
Architectures n-tiers
Heithem Abbes
 
Rapport de stage développement informatique
MehdiOuqas
 
qcm développement informatique
beware_17
 
Support de cours angular
ENSET, Université Hassan II Casablanca
 
RADIUS ET TACACS+.pptx
ZokomElie
 
Complete Java Course
Lhouceine OUHAMZA
 
Telecharger Exercices corrigés PL/SQL
webreaker
 
T1 corrections-qcm
infcom
 
Methodes d'accès dans les réseaux locaux
Ines Kechiche
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
Cours Génie Logiciel - Introduction
Mohammed Amine Mostefai
 
TD_complet_reseau__CISCO__Packet Tracer.pdf
Ines Ben Hassine
 
Conception et réalisation du module agenda partagé pour une solution de télés...
Toufik Atba
 
Mise en oeuvre des framework de machines et deep learning v1
ENSET, Université Hassan II Casablanca
 
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Addi Ait-Mlouk
 
gestion de magasin vente matériels informatique
Oussama Yoshiki
 
Mini projet individuel php
Khadim Mbacké
 
Rapport application chat
Tbatou sanae
 
Publicité

Similaire à Requêtes HTTP synchrones et asynchrones (20)

PDF
Ajax (Asynchronous JavaScript and XML)
Abdelouahed Abdou
 
PPTX
Introduction à ajax
Abdoulaye Dieng
 
PDF
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
Elalami8
 
PDF
cours web developpement statique AJAX 2024
YounesOuladSayad1
 
PDF
ajax.pdf
Jaouad Assabbour
 
PDF
Introduction to prograaming using ajax PHP JS
AliHusseini14
 
PPT
0554-programmation-web-ajax programmation web ajax
Marouane MM
 
PDF
Ajax GTI780 & MTI780 ETS A09
Claude Coulombe
 
PDF
Le protocole HTTP
Souhaib El
 
PDF
Rest ful architecture
zaghir
 
PPTX
Advanced html5
Arrow Group
 
PDF
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
PPTX
Fondamentaux d’une API REST
Abdoulaye Dieng
 
PDF
Ajax - GTI780 & MTI780 - ETS - A08
Claude Coulombe
 
PPTX
S2-00-HTTP.pptx
kohay75604
 
PPTX
Restful
Mohamed Ou-mechtak
 
PPTX
Restful
Mohamed Ou-mechtak
 
PPTX
Technologie Web.pptx
hashiramasenju65
 
PDF
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
Ajax (Asynchronous JavaScript and XML)
Abdelouahed Abdou
 
Introduction à ajax
Abdoulaye Dieng
 
ajqxè_àànndkllllllllllllllllllllllllllllllllllllllllll
Elalami8
 
cours web developpement statique AJAX 2024
YounesOuladSayad1
 
Introduction to prograaming using ajax PHP JS
AliHusseini14
 
0554-programmation-web-ajax programmation web ajax
Marouane MM
 
Ajax GTI780 & MTI780 ETS A09
Claude Coulombe
 
Le protocole HTTP
Souhaib El
 
Rest ful architecture
zaghir
 
Advanced html5
Arrow Group
 
Les Web Services en 60 diapos chrono !
Olivier Le Goaër
 
Fondamentaux d’une API REST
Abdoulaye Dieng
 
Ajax - GTI780 & MTI780 - ETS - A08
Claude Coulombe
 
S2-00-HTTP.pptx
kohay75604
 
Technologie Web.pptx
hashiramasenju65
 
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
Publicité

Plus de Abdoulaye Dieng (20)

PPTX
Introduction à React
Abdoulaye Dieng
 
PPTX
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
PPTX
Introduction à Symfony
Abdoulaye Dieng
 
PPTX
Panorama des Technologies mobiles
Abdoulaye Dieng
 
PPTX
Prise en main de WordPress
Abdoulaye Dieng
 
PPTX
Initiation à Bootstrap
Abdoulaye Dieng
 
PPTX
Introduction à Laravel
Abdoulaye Dieng
 
PPTX
Introduction à Angular
Abdoulaye Dieng
 
PPTX
Introduction à JavaScript
Abdoulaye Dieng
 
PPTX
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
PPTX
Introduction à Python
Abdoulaye Dieng
 
PPTX
Introduction à React JS
Abdoulaye Dieng
 
PPTX
Initiation à l'algorithmique
Abdoulaye Dieng
 
PPTX
Introduction à Symfony
Abdoulaye Dieng
 
PPTX
Initiation à Bootstrap
Abdoulaye Dieng
 
PPTX
Introduction à jQuery
Abdoulaye Dieng
 
PPT
Introduction à JavaScript
Abdoulaye Dieng
 
PPTX
Initiation à l'algorithmique
Abdoulaye Dieng
 
PPTX
Introduction à HTML 5
Abdoulaye Dieng
 
PPTX
Introduction à AngularJS
Abdoulaye Dieng
 
Introduction à React
Abdoulaye Dieng
 
Fondamentaux du Référencement naturel
Abdoulaye Dieng
 
Introduction à Symfony
Abdoulaye Dieng
 
Panorama des Technologies mobiles
Abdoulaye Dieng
 
Prise en main de WordPress
Abdoulaye Dieng
 
Initiation à Bootstrap
Abdoulaye Dieng
 
Introduction à Laravel
Abdoulaye Dieng
 
Introduction à Angular
Abdoulaye Dieng
 
Introduction à JavaScript
Abdoulaye Dieng
 
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Introduction à Python
Abdoulaye Dieng
 
Introduction à React JS
Abdoulaye Dieng
 
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à Symfony
Abdoulaye Dieng
 
Initiation à Bootstrap
Abdoulaye Dieng
 
Introduction à jQuery
Abdoulaye Dieng
 
Introduction à JavaScript
Abdoulaye Dieng
 
Initiation à l'algorithmique
Abdoulaye Dieng
 
Introduction à HTML 5
Abdoulaye Dieng
 
Introduction à AngularJS
Abdoulaye Dieng
 

Requêtes HTTP synchrones et asynchrones

  • 1. Requêtes HTTP synchrones & asynchrones Avril 2018Abdoulaye Dieng 1
  • 2. Objectifs généraux • Savoir effectuer une requête HTTP synchrone ou asynchrone • Savoir effectuer des requêtes RESTful avec les méthodes GET, POST, PUT, PATCH et DELETE 2
  • 3. Objectifs opérationnels • Comprendre une requête synchrone • Effectuer une requête synchrone • Lire, d’une manière synchrone, le contenu d’un fichier local • Comprendre une requête asynchrone • Effectuer une requête asynchrone • Récupérer des données à partir d’un serveur avec une requête asynchrone • Comprendre les méthodes de requête RESTful • Effectuer des requêtes RESTful avec les méthodes GET, POST, PUT, PATCH et DELETE 3
  • 4. Sommaire 1) Requête synchrone 2) Requête asynchrone 3) Objet XMLHttpRequest 4) Requêtes HTTP et jQuery 5) Méthodes de requête HTTP 4
  • 5. Requête synchrone • Requête synchrone = requête où le navigateur est bloqué durant l’attente de la réponse • Exemples  Clic sur un lien hypertexte  Soumission d’un formulaire • Inconvénient : caractère bloquant qui peut figer un navigateur et entamer l’expérience utilisateur 5
  • 6. Requête asynchrone • Requête asynchrone = requête où le navigateur peut s’occuper sur une autre tâche durant l’attente de la réponse • Exemples  Recharge partielle d’une page  Soumission de données • Avantages  moins de latence  applications plus réactives  moins de trafic réseau  moins de charge sur le serveur • Inconvénient : flot d’exécution non linéaire => difficulté à programmer /debugger 6
  • 7. Objet XMLHttpRequest présentation • XMLHttpRequest : objet JavaScript permettant de faire des requêtes HTTP asynchrone et synchrone. • Élément fondamental de la technologie AJAX (Asynchronous JavaScript And XML) • Initialement développé par MicroSoft (en 1998), en tant qu’objet ActiveX, pour Outlook Web Access via IE 5.0 • Ajouté ensuite à ECMAScript et implémenté en tant qu’objet JavaScript par les autres navigateurs à partir de 2002. • Son instanciation se fait différemment selon le navigateur • Toutefois, ses propriétés et méthodes sont les mêmes pour tous les navigateurs. 7
  • 8. Objet XMLHttpRequest quelques propriétés • readyState : état de l’objet XHR au cours de la requête 0 : non initialisé, 1 : requête en cours d’envoi, 2 : requête envoyée, 3 : réponse en cours de réception, 4 : complétude de la réponse • onreadystatechange : contient le gestionnaire d’évènement à appeler à chaque changement de readyState. • responseText : réponse du serveur sous format chaîne de caractères. • responseXML : réponse du serveur sous format XML. • status : code de la réponse HTTP reçue depuis le serveur. • statusText : libellé du code de la réponse HTTP reçue depuis le serveur. 8
  • 9. Objet XMLHttpRequest quelques méthodes • open(requestMethod, url, asynchronousFlag) : prépare l’envoi de la requête • send(bodyContent) : envoie le corps du message (éventuellement null par exemple lors de l’exploitation de la méthode GET) • setRequestHeader(headerField, headerValue) : ajoute une paire champ/valeur à l’en-tête lors de l’envoi de la requête • abort() : stoppe la requête et réinitialise la valeur de readyState à 0 9
  • 10. Objet XMLHttpRequest étapes de lancement d’une requête 1) Évènement déclencheur 2) Instanciation de l’objet XMLHttpRequest 3) Envoi de la requête HTTP 4) Traitement de la requête 5) Réponse du serveur 6) Traitement de la réponse 10 1 2 3 4 5 6
  • 11. Objet XMLHttpRequest Création d’un déclencheur et d’une zone d’affichage de la réponse Cette étape consiste à la création d’une page HTML intégrant : • un déclencheur (un lien, bouton ou n'importe quel contrôle que l'utilisateur peut manipuler pour lancer une action). Exemple • une zone où sera affichée la réponse de l'action de l’utilisateur. Exemple <p> Entrez un entier SVP : <input type="number" > </p> <p> <button> pair ou impair ? <button/> </p> <p id="resultat"> ... </p> 11
  • 12. Objet XMLHttpRequest Création d’un déclencheur et d’une zone d’affichage de la réponse TP 1) Créez le sous-répertoire tps-sync-async-req dans le Webroot de votre serveur Web 2) Dans tps-sync-async-req, créez le sous-réperoire js et le fichier entier.html contenant <script src="js/instancierXHR.js" ></script> <p> Entrez un entier SVP : <input type="number" > </p> <p> <button> pair ou impair ? </button> </p> <p id="resultat"> ... </p> <script src="js/entier.js"></script> 12
  • 13. Objet XMLHttpRequest instanciation function instancierXHR() { var resultat=null; try { // Test pour Chrome, Mozilla, Opera, ... resultat= new XMLHttpRequest(); } catch (Error) { try { // Test pour les navigateurs Internet Explorer > 5.0 resultat= new ActiveXObject("Msxml2.XMLHTTP"); } catch (Error) { try { // Test pour le navigateur Internet Explorer 5.0 resultat= new ActiveXObject("Microsoft.XMLHTTP"); } catch (Error) { resultat= null; } } } return resultat; } L’objet XMLHttpRequest est créé par l’instruction: var objetXHR = instancierXHR() 13
  • 14. Objet XMLHttpRequest instanciation - TP 1. Dans le sous-dossier js créez les fichiers a) instancierXHR.js contenant le code JS de la diapo précédente b) entier.js et lire-fichier-local-en-sync.js contenant tous les deux le code : var objetXHR = instancierXHR(); … 2. Dans le sous-dossier tps-sync-async-req créez le fichier contact.txt contenant Nom Prénom Tel Dia Alpha 771234568 14
  • 15. Objet XMLHttpRequest désignation de la fonction de rappel (mode asynchrone) • La fonction de rappel (ou callback) devra être appelée à chaque fois que l’état de l’objet XMLHttpRequest change (requête en cours d’envoi, requête envoyée, réponse en cours de réception, complétude de la réponse). • Pour cela, on renseigne la propriété onreadystatechange de l'objet. Par exemple : objetXHR.onreadystatechange = actualiserPage; • Cette fonction n’est nécessaire qu’en mode asynchrone et est surtout utilisée pour le traitement de la réponse complète du serveur 15
  • 16. Objet XMLHttpRequest désignation de la fonction de rappel - TP Ajoutez au fichier entier.js le code : var bouton = document.querySelector("button"); bouton.addEventListener("click", function() { objetXHR.onreadystatechange = actualiserPage; … } ) 16
  • 17. Objet XMLHttpRequest initialisation de la requête • La requête est initialisée par la méthode open() qui reçoit :  la méthode d’envoi (GET, POST, PUT, DELETE, …) ;  l'adresse du fichier cible, ainsi qu’éventuellement, la liste des paramètres à passer à celui-ci, dans le cas où la requête est effectuée en mode GET ;  false(synchrone) ou true (asynchrone : mode par défaut). • Exemple avec POST : objetXHR.open("post", "parite.php", true); • Exemple avec GET : var entier=document.querySelector("input").value; objetXHR.open("get", "parite.php?entier="+entier, true); • Exemple : ouverture d’un fichier local en mode synchrone objetXHR.open('GET', './contact.txt', false); 17
  • 18. Objet XMLHttpRequest initialisation de la requête - TP 1. Ajoutez au fichier entier.js le code objetXHR.open("post", "./parite.php"); … 2. Ajoutez au fichier lire-fichier-local-en-sync.js le code objetXHR.open("get", "./contact.txt", false); … 18
  • 19. Objet XMLHttpRequest envoi de la requête • La requête est envoyée par la méthode send() qui reçoit :  ou bien NULL si la méthode d’envoi est GET ;  ou bien la liste des paramètres à passer au programme chargé de traiter la requête, si la méthode d’envoi est POST, PUT ou DELETE. • Exemple avec GET : objetXHR.send(null); • Exemple avec POST : var entier=document.querySelector("input").value; objetXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); objetXHR.send("entier="+entier); 19
  • 20. Objet XMLHttpRequest envoi de la requête - TP 1. Ajoutez au fichier entier.js le code var entier = document.querySelector("input").value; objetXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); objetXHR.send("entier="+entier); 2. Ajoutez au fichier lire-fichier-local-en-sync.js le code objetXHR.send(null); … 20
  • 21. Objet XMLHttpRequest traitement de la requête par le serveur • La requête peut être traitée par un script .php • Exemple : (parite.php dans tps-sync-async-req) <?php header("Content-Type: text/plain");//la réponse est du texte if(!empty($_REQUEST["entier"])){ $entier = $_REQUEST["entier"]; if($entier%2==0){ echo $entier.' est pair'; }else{ echo $entier.' est impair'; } }else{ echo "Aucune donnée reçue"; } 21
  • 22. Objet XMLHttpRequest traitement de la réponse par le navigateur • Réponse traitée grâce à l’une des propriétés responseText et responseXML • Dans le corps de la fonction de rappel en mode asynchrone. • Exemple function actualiserPage() { if (objetXHR.readyState == 4) { if (objetXHR.status == 200) { var resultat= document.getElementById("resultat"); resultat.innerHTML=objetXHR.responseText; } } } • Exemple : ouverture d’un fichier local en mode synchrone console.log(objetXHR.responseText); 22
  • 23. Objet XMLHttpRequest traitement de la réponse - TP 1. Ajoutez au fichier entier.js le code function actualiserPage() { if (objetXHR.readyState == 4) { if (objetXHR.status == 200) { var resultat= document.getElementById("resultat"); resultat.innerHTML=objetXHR.responseText; } } } 2. Ajoutez au fichier lire-fichier-local-en-sync.js le code console.log(objetXHR.responseText); 23
  • 24. Requêtes HTTP et jQuery méthode $.ajax() • jQuery: bibliothèque javascript open-source et cross-browser permettant, entre autres, de manipuler le DOM et de simplifier le dialogue client/serveur • Méthode $.ajax()  Reçoit des options sous la forme {clef1:val1, clef2:val2, …}  Envoie une requête asynchrone par défaut  Retourne l'objet jqXHR (sur-ensemble de XMLHttpRequest) contenant les infos sur la requête et sa réponse  Principales clefs des options • url:"URL_cible", URL du script qui reçoit la requête • method:"GET"|"POST"|"PUT"|"DELETE", méthode HTTP • data:{key1:value1, key2:value2, …}, données à envoyer • dataType:"text"|"html"|"json"|"xml"|… , type de données attendu 24
  • 25. Requêtes HTTP et jQuery méthodes .done() et .fail() de l’objet jqXHR • Méthodes alternatives et différées • .done() reçoit la fonction de rappel à exécuter en cas de succès de la requête et retourne l’objet jqXHR (=> chaînabilité) • La callback reçoit la réponse puis une chaîne (« success ») indiquant l’état de l’opération et enfin l’objet jqXHR • .fail() reçoit la fonction de rappel à exécuter en cas d’échec de la requête et retourne l’objet jqXHR • La callback reçoit l’objet jqXHR puis une chaîne (« timeout », « error », « abort » ou « parsererror ») indiquant l’état de l’opération et enfin un texte (« Not Found », « Internal Server Error ») donnant l'information sur l'erreur. 25
  • 26. Requêtes HTTP et jQuery exemple : Récupérer des données distantes • Télécharger la biblio. jquery à partir de http://jquery.com/download/ • Dans le Webroot d’un serveur, créez le sous-rep exemple-asyn qui contiendra les fichiers hello.html et fetch-remote-data.html • Contenu de hello.html : <p>hello front-end !!!</p> • Contenu de fetch-remote-data.html <script src="chemin/vers/jquery.js"></script> <script> $.ajax({ url: "http://localhost/jquery-backend/hello.html", dataType:"html" }) .done(function(data) { alert("Données reçues : "+data); }) .fail(function(jqXHR, textStatus,errorThrown) { alert( "Echec de la requete"); console.log( "Error: " + errorThrown ); console.log( "Status: " + textStatus ); console.dir( jqXHR ); }); </script> • Tester .fail() en modifiant les valeurs de url et de dataType 26
  • 27. Méthodes de requête HTTP présentation • Méthode de requête indiquent l'action que l'on souhaite réaliser sur la ressource demandée • Quelques méthodes (ou verbes) HTTP  GET : adaptée pour récupérer des données  POST : adaptée pour envoyer des données  PUT : adaptée pour remplacer entièrement des données  DELETE : adaptée pour supprimer des données  PATCH : adaptée pour remplacer partiellement des données 27
  • 28. Méthodes de requête HTTP outils des travaux pratiques • Téléchargez et installez npm à travers NodeJS https://nodejs.org/en/download/current/ • Installez le serveur REST factice : JSON server npm install –g json-server • Installez un client REST sous forme d’une extension navigateur Postman, Advanced Rest Client ou un autre • Démarrez JSON server json-server --watch db.json • NB : db.json est un fichier texte contenant les données au format JSON. Vous pouvez créer votre propre fichier et l’indiquer à JSON server lors de son démarrage 28
  • 29. Méthodes de requête HTTP Travaux pratiques Avec le client REST, requêtez l’URL http://localhost:3000/ suffixée d’une des routes suivantes : 1) GET /posts 2) POST /posts avec deux posts à ajouter 3) GET /posts/2 4) PUT /posts/2 avec les modifications 5) PATCH /posts/3 avec les modifications partielles 6) DELETE /posts/3 29

Notes de l'éditeur

  • #2: https://code.tutsplus.com/tutorials/http-the-protocol-every-web-developer-must-know-part-1--net-31177
  • #8: Outlook Web App (anciennement Outlook Web Access) est un logiciel de messagerie web créé par Microsoft, et qui ressemble volontairement au logiciel Microsoft Outlook du même auteur. Il permet aux usagers d'accéder à leur courrier électronique à l'aide d'un navigateur web, en évitant la procédure préalable d'installation requise par Microsoft Outlook. Il est commercialisé au sein d'Office 365, de Microsoft Exchange Server ou d'Exchange Online.
  • #28: https://developer.mozilla.org/fr/docs/HTTP/M%C3%A9thode