Je sais que l'API Fetch utilise Promise
s et que les deux vous permettent de faire des requêtes AJAX à un serveur.
J'ai lu que l'API Fetch possède des fonctionnalités supplémentaires, qui ne sont pas disponibles dans XMLHttpRequest
(et dans le polyfill d'API Fetch, car elles sont basées sur XHR
).
Quelles sont les fonctionnalités supplémentaires de l'API Fetch?
Il y a quelques choses que vous pouvez faire avec fetch et non avec XHR:
no-cors
, en obtenant une réponse d'un serveur qui n'implémente pas CORS. Vous ne pouvez pas accéder au corps de la réponse directement à partir de JavaScript, mais vous pouvez l'utiliser avec d'autres API (par exemple, l'API Cache).Il y a quelques choses que vous pouvez faire avec XHR que vous ne pouvez pas encore faire avec chercher, mais elles seront disponibles tôt ou tard (lisez le paragraphe "Améliorations futures" ici: https://hacks.mozilla.org/2015/03/this-api-is-so-fetching/ ):
Cet article https://jakearchibald.com/2015/thats-so-fetch/ contient une description plus détaillée.
mozAnon
] ou du AnonXMLHttpRequest
constructeur)FormData
instancesno-cors
de fetch
Les réponses ci-dessus sont bonnes et fournissent de bonnes idées, mais je partage le même avis que celui partagé dans ce entrée de blog de développeurs Google en ce que la principale différence (d'un point de vue pratique) réside dans la commodité de la fonction intégrée promesse retournée de fetch
Au lieu d'avoir à écrire un code comme celui-ci
function reqListener() {
var data = JSON.parse(this.responseText);
}
function reqError(err) { ... }
var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.onerror = reqError;
oReq.open('get', './api/some.json', true);
oReq.send();
nous pouvons nettoyer les choses et écrire quelque chose d'un peu plus concis et lisible avec des promesses et une syntaxe moderne
fetch('./api/some.json')
.then((response) => {
response.json().then((data) => {
...
});
})
.catch((err) => { ... });