Objectifs:
POST
avec XMLHttpRequest
POST
avec XMLHttpRequest
Dans la partie précédente, nous avons utilisé la classe XMLHttpRequest
pour envoyer des requĂŞtes de type HTTP GET
. Pour rappel, ce type de requête permet de récupérer des informations depuis un serveur.
Dans cette partie, nous allons voir comment utiliser cette mĂŞme classe pour envoyer des requĂŞtes de type HTTP POST
. Même s’il permet aussi de recevoir une réponse du serveur à ces requêtes, ce type de requête permet d’envoyer des informations.
Voici un exemple de requĂŞte POST
effectuée en JavaScript/AJAX:
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://httpbin.org/post');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
alert(xhr.responseText);
}
};
// envoi d'une chaine de caractères:
xhr.send('ceci est un exemple de données envoyées');
Le principe de fonctionnement est exactement le même que celui d’une requête GET
, sauf que nous avons cette fois-ci envoyé une chaine de caractères via notre requête à l’adresse serveur https://httpbin.org/post
.
Pour cela, nous avons:
GET
par POST
, dans l’appel à la méthode open()
,send()
.Pour envoyer un objet JavaScript / JSON dans une requĂŞte POST
, il faut d’abord sérialiser l’objet (c’est à dire: le convertir) sous forme de chaine de caractères, à l’aide de la fonction JSON.stringify()
.
Il suffit donc de modifier le paramètre passé à la méthode send()
, tel que dans l’exemple suivant:
// ... ou envoi d'un objet JSON:
xhr.send(JSON.stringify({ message: 'bonjour!' }));
En effet, JSON.stringify()
est la fonction inverse de JSON.parse()
:
JSON.parse()
permet de convertir une chaine de caractères en objet,JSON.stringify()
permet de convertir un objet en chaine de caractères.Attention: veillez à ne pas appeler la méthode
send()
d’une même instance (ex:xhr
, dans notre exemple) plus d’une seule fois !
https://httpbin.org/post
pour tester le bon fonctionnement de vos requêtes POST. Cette API vous envoie en réponse le contenu que le serveur a reçu suite à votre requête.Un serveur est mis à votre disposition à l’URL https://js-ajax-twitter.herokuapp.com. Comme Twitter, l’application Web exécutée sur ce serveur permet aux utilisateurs de publier des messages publics en temps réel.
Le but de cet exercice est de publier vos messages en utilisant une requĂŞte AJAX.
Sont fournis:
/tweet
;Pour publier un message sur ce serveur, il faut envoyer une requĂŞte HTTP POST
à l’adresse /tweet
(accessible depuis la racine du serveur), en transmettant un objet JSON.
L’objet JSON à envoyer comme contenu de la requête doit contenir deux propriétés:
message
: le texte Ă publier. (type: string
)token
: le jeton fourni après identification de l’utilisateur. (type: string
)Note: La valeur de la propriété token
de l’objet à envoyer est générée automatiquement par le client simple fourni, dans la variable globale window.token
.
À chaque requête HTTP valide reçue, le serveur répondra par un objet JSON ayant:
error
contenant un message d’erreur (type: string
);ok
, dans le cas où le message a été publié sans erreur.Remarque importante: le bouton d’identification de Google n’a été activé que depuis les domaines
jsbin.com
,codepen.io
etjs-ajax-twitter.herokuapp.com
. Vous ne pourrez donc pas exécuter le client simple fourni (ni une version dérivée) depuis un autre domaine, ni depuis le système de fichiers de votre machine (protocolefile://
).
alert()
.Conseil: Pensez à utiliser la console JavaScript et l’onglet “Réseau” de Chrome Dev Tools pour diagnostiquer.
Quand vous aurez terminé toutes les étapes proposées ci-dessus, vous pourrez apporter les améliorations suivantes à votre client: