Sé que Fetch API usa Promise s y ambos le permiten realizar solicitudes AJAX a un servidor.
He leído que Fetch API tiene algunas características adicionales, que no están disponibles en XMLHttpRequest (y en el polyfill de Fetch API, ya que está basado en XHR ).
¿Qué capacidades adicionales tiene la API Fetch?
Hay algunas cosas que puede hacer con fetch y no con XHR:
no-cors y obtener una respuesta de un servidor que no implementa CORS. No puede acceder al cuerpo de la respuesta directamente desde JavaScript, pero puede usarlo con otras API (por ejemplo, la API de caché);Hay un par de cosas que puede hacer con XHR que aún no puede hacer con fetch, pero estarán disponibles tarde o temprano (lea el párrafo "Mejoras futuras" aquí: https://hacks.mozilla .org/2015/03/this-api-is-tan-fetching/ ):
Este artículo https://jakearchibald.com/2015/thats-so-fetch/ contiene una descripción más detallada.
ReadableStream como cuerpos de solicitud aún está por llegar )--allow-file-access-from-files (chromium)mozAnon no estándar o el constructor AnonXMLHttpRequest )FormDatano-cors de fetchLas respuestas anteriores son buenas y brindan buenos conocimientos, pero comparto la misma opinión que se comparte en esta entrada del blog de desarrolladores de Google en el sentido de que la principal diferencia (desde una perspectiva práctica) es la conveniencia de la promesa incorporada devuelta por fetch
En lugar de tener que escribir código como este
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();podemos limpiar las cosas y escribir algo un poco más conciso y legible con promesas y sintaxis moderna
fetch('./api/some.json') .then((response) => { response.json().then((data) => { ... }); }) .catch((err) => { ... });