--- title: Formation XHR Request tags: javascript robots: noindex, nofollow author: Julien Noyer --- # XMLHttpRequest : les requête XHR ```htmlmixed= <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>XMLHttpRequest : les requête XHR</title> </head> <body> <h1>XMLHttpRequest : les requête XHR</h1> <script> /* Configuration de la requête XHR XMLHttpRequest est un objet JavaScript qui permet de récupérer des données via HTTP */ // Instanciation de l'objet XMLHttpRequest const XHRrequest = new XMLHttpRequest(); // Définition de la fonction (ES5) de callback XHRrequest.onreadystatechange = function(event) { if (this.readyState == XMLHttpRequest.DONE) { console.log('Requête XHR terminée.'); // Vérification de l'état de la requête switch(this.status){ case 200: console.log("Content-Type: %s", XHRrequest.getResponseHeader("Content-Type")); console.log("Données reçues: %s", this.responseText); break; case 201: console.log("Content-Type: %s", XHRrequest.getResponseHeader("Content-Type")); console.log("Données crées: %s", this.responseText); break; default: console.log("Status de la réponse: %d (%s)", this.status, this.statusText); break; }; } else { console.log('Requête XHR en cours...') }; }; // /* Lancer la requête XHR Toutes les méthodes du CRUD sont possibles en XHR */ // Définition d'une variable pour tester les différentes méthodes const requestType = 'POST'; if( requestType === 'GET' ){ // Méthode GET XHRrequest.open('GET', 'https://jsonplaceholder.typicode.com/posts', true); XHRrequest.send(null); } else if(requestType === 'POST'){ // Méthode POST : configurer le header de la requête et envoyer des données XHRrequest.open('POST', 'https://jsonplaceholder.typicode.com/posts', true); XHRrequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); XHRrequest.send('title=Foo&body=bar'); } else if(requestType === 'PUT'){ // Méthode PUT : configurer le header de la requête et envoyer des données XHRrequest.open('PUT', 'https://jsonplaceholder.typicode.com/posts/1', true); XHRrequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); XHRrequest.send('title=Foo&body=bar'); } else if(requestType === 'DELETE'){ // Méthode DELETE XHRrequest.open('DELETE', 'https://jsonplaceholder.typicode.com/posts/1', true); XHRrequest.send(null); }; // </script> </body> </html> ``` # $.ajax() : la méthode jQuery ```htmlmixed= <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>$.ajax() : la méthode jQuery</title> </head> <body> <h1>$.ajax() : la méthode jQuery</h1> <ul></ul> <!-- Importer jQuery --> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> /* Définition d'une fonction Ajax en jQuery La méthode Ajax de jQuery est une fonction qui intégrer les notions de requête XHR */ const AJAXrequest = (url, requestType, data = null) => { // Utilisation de la méthode $.ajax() $.ajax({ // Définition du header de la requête url: url, method: requestType, data: data, // Fonction de callback en cas de succès success: (response) => { console.log(`Succès de la requête ${requestType} AJAX.`); console.log(response); for( let post of response ){ document.querySelector('ul').innerHTML += ` <li> <h2>${post.title}</h2> <a href="${post.id}">Lire la suite</a> </li> ` }; }, // Fonction de callback en cas d'erreur error: (err) => { console.log(`Erreur de la requête ${requestType} AJAX.`); console.error(err); }, // Fonction de callback en fin de requête complete: () => { console.log(`${requestType} Requête AJAX terminée.`); // Manipuler les éléments dynamiques du DOM for( let link of document.querySelectorAll('a') ){ link.addEventListener('click', (event) => { event.preventDefault(); console.log(`L'ID du post est ${link.getAttribute('href')}`); }) } } }); }; // /* Lancer la requête AJAX Toutes les méthodes du CRUD sont possibles en AJAX */ AJAXrequest( 'https://jsonplaceholder.typicode.com/posts', 'GET' ); /* AJAXrequest( 'https://jsonplaceholder.typicode.com/posts', 'POST', { "title": "Foo", "body": "Bar" } ); AJAXrequest( 'https://jsonplaceholder.typicode.com/posts/1', 'PUT', { "title": "Foo", "body": "Bar" } ); AJAXrequest( 'https://jsonplaceholder.typicode.com/posts/1', 'DELETE' ); */ // </script> </body> </html> ``` # FETCH : la nouvelle API pour les requêtes AJAX ```htmlmixed= <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>FETCH : la nouvelle API pour les requêtes AJAX</title> </head> <body> <h1>FETCH : la nouvelle API pour les requêtes AJAX</h1> <script> /* Définition d'une fonction FETCH L'API FETCH est présente dans les navigateurs et permet d'exécuter des requête AAJX */ const FETCHrequest = ( url, requestType, data = null ) => { console.log(`${requestType} Requête FETCH en cours...`); // Définition du header de la requête let requestHeader = { method: requestType, headers: { 'Content-Type': 'application/json' } }; // Ajouter les données dans les requêtes POST et PUT if( requestType === 'POST' || requestType === 'PUT'){ requestHeader.body = JSON.stringify(data); }; // Lancer la requête fetch fetch( url, requestHeader ) .then( apiResponse => { // Vérifier le status de la requête if( apiResponse.ok ){ // Extraire les données JSON de la réponse return apiResponse.json(); } else{ console.error(apiResponse.statusText); }; }) .then( jsonData => { console.log(jsonData); }) .catch( apiError => { console.error(apiError); }); }; // /* Lancer la requête FETCH Toutes les méthodes du CRUD sont possibles avec l'API FETCH */ FETCHrequest( 'https://jsonplaceholder.typicode.com/posts', 'GET' ); FETCHrequest( 'https://jsonplaceholder.typicode.com/posts', 'POST', { "title": "Foo", "body": "bar" } ); FETCHrequest( 'https://jsonplaceholder.typicode.com/posts/1', 'PUT', { "title": "Foo", "body": "bar" } ); FETCHrequest( 'https://jsonplaceholder.typicode.com/posts/1', 'DELETE' ); // </script> </body> </html> ```