L'introduction de XMLHttpRequest (XHR) dans les navigateurs au milieu des années 2000 a été une énorme victoire pour la plate-forme Web. Voyons voir comment ça fonctionne.
- introduction
- Un exemple de requête XHR
- Paramètres open () supplémentaires
onreadystatechange
- Annulation d'une demande XHR
- Comparaison avec jQuery
- Comparaison avec Fetch
- Demandes inter-domaines
- Téléchargement de fichiers à l'aide de XHR
introduction
L'introduction de XMLHttpRequest (XHR) dans les navigateurs au milieu des années 2000 a été une énorme victoire pour la plate-forme Web. Voyons voir comment ça fonctionne.
Les choses qui semblaient maintenant normales, à l'époque, semblaient venir du futur. Je parle de GMail ou de Google Maps, par exemple, qui étaient tous basés en grande partie sur XHR.
XHR a été inventé chez Microsoft dans les années 90 et est devenu une norme de facto car tous les navigateurs l'ont implémenté dans la période 2002-2006. Le XMLHttpRequest normalisé du W3C en 2006.
Comme cela peut parfois arriver dans la plate-forme Web, il y avait au départ quelques incohérences qui rendaient le travail avec XHR assez différent entre les navigateurs.
Les bibliothèques comme jQuery ont gagné en popularité en fournissant une abstraction facile à utiliser pour les développeurs, ce qui a contribué à diffuser l'utilisation de cette technologie.
Un exemple de requête XHR
Le code suivant crée un objet de requête XMLHttpRequest (XHR) et attache une fonction de rappel qui répond sur leonreadystatechange
un événement.
La connexion xhr est configurée pour exécuter une requête GET pourhttps://yoursite.com
, et cela a commencé avec lesend()
méthode:
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
xhr.status === 200 ? console.log(xhr.responseText) : console.error('error')
}
}
xhr.open('GET', 'https://yoursite.com')
xhr.send()
Paramètres open () supplémentaires
Dans l'exemple ci-dessus, nous venons de transmettre la méthode et l'URL à la requête.
Nous pouvons également spécifier les autres méthodes HTTP - (get
,post
,head
,put
,delete
,options
).
D'autres paramètres vous permettent de spécifier un indicateur pour rendre la demande synchrone si elle est définie sur false, et un ensemble d'informations d'identification pour l'authentification HTTP:
open(method, url, asynchronous, username, password)
onreadystatechange
Leonreadystatechange
est appelé plusieurs fois lors d'une demande XHR. Nous ignorons explicitement tous les états autres quereadyState === 4
, ce qui signifie que la demande est terminée.
Les états sont
- 1 (OUVERT): la requête démarre
- 2 (HEADERS_RECEIVED): les en-têtes HTTP ont été reçus
- 3 (LOADING): la réponse commence à se télécharger
- 4 (DONE): la réponse a été téléchargée
Annulation d'une demande XHR
Une demande XHR peut être abandonnée en appelant leabort()
méthode sur lexhr
objet.
Comparaison avec jQuery
Avec jQuery, ces lignes peuvent être traduites en:
$.get('https://yoursite.com', data => {
console.log(data)
}).fail(err => {
console.error(err)
})
Comparaison avec Fetch
Avec leRécupérer l'APIc'est le code équivalent:
fetch('https://yoursite.com')
.then(data => {
console.log(data)
})
.catch(err => {
console.error(err)
})
Demandes inter-domaines
Notez qu'une connexion XMLHttpRequest est soumise à des limites spécifiques qui sont appliquées pour des raisons de sécurité.
L'une des plus évidentes est l'application de la même politique d'origine.
Vous ne pouvez pas accéder aux ressources sur un autre serveur,à moins quele serveur prend explicitement en charge cela en utilisantCORS (partage de ressources inter-origines).
Téléchargement de fichiers à l'aide de XHR
Consultez mon tutoriel surcomment télécharger des fichiers à l'aide de XHR.
Téléchargez mon gratuitManuel du débutant JavaScript
Plus de didacticiels sur le navigateur:
- Quelques astuces utiles disponibles en HTML5
- Comment j'ai fait fonctionner un site Web basé sur un CMS hors ligne
- Le guide complet des applications Web progressives
- L'API Fetch
- Le guide de l'API Push
- L'API Channel Messaging
- Tutoriel pour les techniciens de service
- Le guide de l'API Cache
- Le guide de l'API de notification
- Plongez dans IndexedDB
- L'API Selectors: querySelector et querySelectorAll
- Chargez efficacement JavaScript avec différé et asynchrone
- Le modèle d'objet de document (DOM)
- L'API Web Storage: stockage local et stockage de session
- Découvrez comment fonctionnent les cookies HTTP
- L'API History
- Le format d'image WebP
- XMLHttpRequest (XHR)
- Un tutoriel SVG approfondi
- Que sont les URL de données
- Feuille de route pour apprendre la plate-forme Web
- CORS, partage de ressources inter-origines
- Travailleurs Web
- Le guide requestAnimationFrame ()
- Quel est le Doctype
- Utilisation de la console DevTools et de l'API de la console
- L'API de synthèse vocale
- Comment attendre l'événement DOM ready en JavaScript brut
- Comment ajouter une classe à un élément DOM
- Comment faire une boucle sur des éléments DOM à partir de querySelectorAll
- Comment supprimer une classe d'un élément DOM
- Comment vérifier si un élément DOM a une classe
- Comment modifier la valeur d'un nœud DOM
- Comment ajouter un événement de clic à une liste d'éléments DOM renvoyés par querySelectorAll
- WebRTC, l'API Web en temps réel
- Comment obtenir la position de défilement d'un élément en JavaScript
- Comment remplacer un élément DOM
- Comment accepter uniquement les images dans un champ de fichier d'entrée
- Pourquoi utiliser une version préliminaire d'un navigateur?
- L'objet Blob
- L'objet fichier
- L'objet FileReader
- L'objet FileList
- ArrayBuffer
- ArrayBufferView
- L'objet URL
- Tableaux typés
- L'objet DataView
- L'API BroadcastChannel
- L'API Streams
- L'objet FormData
- L'objet Navigateur
- Comment utiliser l'API de géolocalisation
- Comment utiliser getUserMedia ()
- Comment utiliser l'API Drag and Drop
- Comment travailler avec le défilement sur les pages Web
- Gestion des formulaires en JavaScript
- Événements de clavier
- Événements de souris
- Événements tactiles
- Comment supprimer tous les enfants d'un élément DOM
- Comment créer un attribut HTML à l'aide de JavaScript vanille
- Comment vérifier si une case est cochée à l'aide de JavaScript?
- Comment copier dans le presse-papiers à l'aide de JavaScript
- Comment désactiver un bouton à l'aide de JavaScript
- Comment rendre une page modifiable dans le navigateur
- Comment obtenir des valeurs de chaîne de requête en JavaScript avec URLSearchParams
- Comment supprimer tous les CSS d'une page à la fois
- Comment utiliser insertAdjacentHTML
- Safari, prévenez avant de quitter
- Comment ajouter une image au DOM en utilisant JavaScript
- Comment réinitialiser un formulaire
- Comment utiliser Google Fonts