Cette page présente un module Ajax Vanilla JS (pur JavaScript). Ajax vous permet de:
Le module présenté sur cette page présente les spécifications suivantes:
Admirer la simplicité de création d'une requête Ajax :
import {ajax} from '/path/to/ajax.min.js';
ajax('https://api_url.com')
.post({ "key1": "value1", "key2": "value2"})
.then(function(response) { alert(response) })
.catch(function() { alert ('Error') })
Detaillons l'exemple précédent. Pour commencer, il faut charger le module avec la ligne suivante(notez que les modules ne peuvent être importés que depuis des modules) :
import {ajax} from '/path/to/ajax.min.js';
Avec la fonction ajax()
, on crée la requête en définissant l'URL de la requête :
.ajax('https://api_url.com')
On définit ensuite les données et on poste la requête. L'exemple suivant va créerror
des variables $_POST['key1']
et $_POST['key2']
sur un serveur PHP :
.post({ "key1": "value1", "key2": "value2"})
Si la requête réussit, la fonction de la méthode then
sera appelée. Dans l'exemple
ci dessous, les données reçues sont affichées dans la console. Vous pouvez utiliser des
fonctions classiques ou des fonctions fléchées (arrow function):
.then(function (response) { alert(response) })
// or
.then((response) => alert(response))
Si la demande échoue, l'erreur sera interceptée. Ici, une alerte s'affichera :
.catch(function () { alert ('Error') } )
// or
.catch(() => alert ('Error'))
Si vous n'êtes pas familié avec les promesses, vous avez juste besoin de savoir que :
then
est appelée en cas de succèscatch
est appelé en cas d'échecChaque méthode retourne l'objet Ajax courant (this
), il est donc possible de chaîner les méthodes
comme dans l'exemple suivant:
ajax()
.url('https://api_url.com')
.method('POST')
.data('key1','Value1')
.data('key2','Value2')
.send()
.then((data) => { console.log ('success', data) })
.catch((error) => { console.log ('failed', error.status)} );
Si vous avez l'habitude d'utilsier jQuery, vous pouvez créer un objet et le
passer en paramètre du constructeur ajax()
comme illustré ci-dessous :
ajax({
url:'https://api_url.com',
method:'POST',
data:{
key1:'Value1',
key2:'Value2'
}).send()
.then((data) => { console.log ('success', data) })
.catch((error) => { console.log ('failed', error.status)} );
Il y a plusieurs façons de définir l'URL de destination:
Appelez le constructeur avec l'URL en paramètre sous forme de chaîne de caractères
ajax('https://api_url.com')
Appelez le constructeur avec l'URL en paramètre sous forme d'object JavaScript :
ajax({url: 'https://api_url.com'})
Vous pouvez appeler la function url()
pour définir l'URL:
ajax().url('https://api_url.com')
Il y a plusieurs façons de spécifier la méthode de transmission (POST
ou GET
).
Si la méthode n'est pas spécifiée, la méthode POST
est définie par défaut.
Appelez le constructeur avec cla méthode d'envoi spécifiée sous forme d'objet en argument :
ajax({method: 'GET'})
Vous pouvez aussi appeller la fonction method()
:
ajax().method('GET')
Il est également possible de spécifier la méthode de transmission en appelant
la fonction .post()
ou .get()
à la place de .send()
:
ajax().post() // Request with the POST method
ajax().get() // Request with the GET method
Les functions .post()
, .get()
and .send()
accepte des arguments optionnel permettant
de définir les données à envoyer. Voire section Les méthodes post(), get() et send().
Il y a plusieurs façon de définir les données à poster
Si vous ne spécifier pas de données à envoyer, la requête sera transmise sans données. Cela peut être utilie pour charger un fichier depuis un autre domaine par exemple. L'exemple suivant requête le code source de ce module Ajax depuis mon blog :
Appelez le constructeur avec les données en argument sous forme d'objet JavaScript :
ajax({data: { key1:'Value1', key2:'Value2' } })
Vous pouvez appeler la fonction data()
. Cette fonction accepte :
ajax().data( {key1: 'Value1} )
ajax().data( 'key1', 'Value1' )
Les données peuvent être spécifiées en appelant directement les
méthodes .post()
, .get()
ou .send()
:
ajax().post( {key1: 'Value1} )
ajax().get( 'key1', 'Value1' )
ajax().send( { key1: 'Value1, key2: 'Value2 } )
Comme pour la méthode .data()
, les arguments peuvent être des chaînes de caractères
ou des objets.
Les fonctions .post()
, .get()
et .send()
retournent toutes une promesse.
Si la reqûête retourne un code status de réponse HTTP de succès
, la fonction callback de then()
est appelée, sinon la fonction de callback catch()
est appelée en cas d'échec.
La requête est considérée comme réussie si le code de réponse est dans l'intervalle [200; 299].
En cas d'échec, la promesse retourne l'objet de la requête XMLHttpRequest
. Cet objet contient des informations
additionnelles sur la requête. Les propriétés de cet objet sont utilises pour diagnostiquer les
erreurs de transmission ou pour avertir l'utilisateur des raisons de l'échec. Les propriétés les
plus utiles sont:
XMLHttpRequest.readyState
état de la requête, doit être égal à 4XMLHttpRequest.response
réponse de la requêteXMLHttpRequest.responseText
réponse de la requête sous forme de texteXMLHttpRequest.status
status de la requête, doit être dans l'intervalle [200; 299]. Voire les codes de réponse HTTP for more detailsLa liste compléte des propriétés est détaillée sur la page page XMLHttpRequest
Vous pouvez tester directement la version non compressée (non minimifiée) du code source directement sur JSFiddle.