CursosEmpresasBlogLiveConfPrecios

XMLHTTPRequest

Clase 8 de 26 • Curso de Asincronismo con JavaScript

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    Lo que aprenderás en este curso

    Lo que aprenderás en este curso

    01:34
  • 2
    Qué es el asincronismo

    Qué es el asincronismo

    09:25
  • 3
    Event Loop

    Event Loop

    11:13
  • 4
    Iniciando a programar con JavaScript

    Iniciando a programar con JavaScript

    02:59
Callbacks
  • 5
    Configuración

    Configuración

    10:23
  • 6
    Qué son los Callbacks

    Qué son los Callbacks

    14:56
  • 7

    Playground: Ejecuta un callback con 2s de demora

    00:00
  • 8
    XMLHTTPRequest

    XMLHTTPRequest

    15:03
  • 9
    Fetch data

    Fetch data

    17:44
  • 10
    Callback hell

    Callback hell

    06:56
Promesas
  • 11
    Qué son las promesas

    Qué son las promesas

    11:54
  • 12

    Playground: Crea una función de delay que soporte asincronismo

    00:00
  • 13
    Fetch

    Fetch

    16:12
  • 14
    Fetch POST

    Fetch POST

    14:55
Async Await
  • 15
    Funciones asíncronas

    Funciones asíncronas

    10:07
  • 16
    Try and catch

    Try and catch

    11:51
  • 17

    Playground: Captura el error de una petición

    00:00
  • 18
    ¿Cómo enfrentar los errores?

    ¿Cómo enfrentar los errores?

    03:42
Generadores
  • 19
    Generators

    Generators

    08:06
Proyecto CV
  • 20
    Proyecto del curso

    Proyecto del curso

    11:48
  • 21
    Consumiendo API

    Consumiendo API

    19:24
  • 22
    Desplegando el proyecto

    Desplegando el proyecto

    16:45
  • 23

    Playground: Crea una utilidad para hacer peticiones

    00:00
Nunca pares de crear
  • 24
    Conclusión

    Conclusión

    03:09
  • 25
    ¿Qué camino tomar para seguir aprendiendo?

    ¿Qué camino tomar para seguir aprendiendo?

    04:12
  • 26

    Autoevaluación de Proyecto: Creación de Landing Page

    00:44
    Maria Gabriela Rodriguez Cuevas

    Maria Gabriela Rodriguez Cuevas

    student•
    hace 3 años

    📥 𝗖𝗹𝗮𝘀𝗲 #𝟳: 𝗫𝗠𝗟𝗛𝗧𝗧𝗣𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝟳/𝟮𝟭 📤 . 📲 ++XMLHttpRequest++ es un objeto de JS que permite hacer peticiones hacia servicios en la nube(URLs o APIs). . 📪 ++Existen 5 estados en un llamado XMLHttpRequest:++ .

    • 0 → Se ha inicializado.
    • 1 → Loading (cargando).
    • 2 → Se ha cargado.
    • 3 → Procesamiento si existe alguna descarga.
    • 4 → Completado. .

    📫 ++Métodos y propiedades:++ . xmlhttp.open() → Prepara la petición para ser enviada tomando tres parámetros: prótocolo, url, asíncrono (true). xmlhttp.readyState → Retorna el estado de la petición. xmlhttp.onreadystatechange → Un eventHandler que es llamado cuando la propiedad readyState cambia. xmlhttp.status → Retorna el estado de la respuesta de la petición. (200,400,500) xmlhttp.send() → Envía la petición. . 📬 ++Características del protocolo http:++ . ++Verbos++: Los verbos indican acciones que están asociadas a peticiones y recursos, es decir, sirven para la manipulación de recursos cliente/servidor. Los Verbos http son:

    • GET → Solicita un recurso.
    • HEAD → Solicita un recurso pero sin retornar información, la estructura de esta petición es igual que get tanto en su headers como estatus. Es útil cuando vamos a utilizar API, para comprobar si lo que vamos a enviar esta correcto y puede ser procesado.
    • POST → Sirve para la creación de recursos en el servidor.
    • PUT → Actualiza por completo un recurso, reemplaza todas las representaciones actuales del recurso de destino con la carga útil de la petición.
    • PATCH → Actualiza parcialmente un recurso.
    • DELETE → Elimina un recurso. .

    📭 ++Los códigos de estados del servidor:++ . El código de estado (status codes) sirve para describir el estado de la petición hecha al servidor.

    • 1xx → Indican que la petición fue recibida por el servidor, pero está siendo procesada por el servidor.
    • 2xx → Indican que la petición fue recibida, aceptada y procesada correctamente.
    • 3xx → Indican que hay que tomar acciones adicionales para completar la solicitud.
    • 4xx → Indican errores del lado del cliente que hizo mal una solicitud.
    • 5xx → Indican errores del servidor. Suelen aparecer cuando existe un fallo en la ejecución en el servidor. .

    📧 ++Los códigos más comunes a la hora de interactuar con una API son:++ .

    • 200 → OK → Indica que todo está correcto.
    • 201 → Created → Todo está correcto cuando se hizo una solicitud POST, el recurso se creó y se guardó correctamente.
    • 204 → No Content → Indica que la solicitud se completó correctamente pero no devolvió información. Este es común cuando se hacen peticiones con el verbo DELETE.
    • 400 → Bad Request → Indica que algo está mal en la petición (no encontró algo).
    • 401 → Unauthorized → Significa que antes de hacer una solicitud al servidor nos debemos autenticar.
    • 403 → Forbidden → Indica que no tenemos acceso a ese recurso aunque se esté autenticado.
    • 404 → Not Found → Indica que no existe el recurso que se está intentando acceder.
    • 500 → Internal Server Error → Indica que algo falló, es un error que retorna el servidor cuando la solicitud no pudo ser procesada. . Fuente: aquí .

    🖍️ ++Ejemplo en VSC:++ .

    1. Ir a la consola y ubicarnos en la carpeta del proyecto y escribir el comando para instalar el paquete ++XMLHttpRequest++: npm i xmlhttprequest
    2. Ir al ++VSC++ y crear un archivo llamado challenge.js en la ruta src/callback. El archivo queda:
    const XMLHttppRequest = requiere('xmlhttprquest'); //llamado al XmlHttpRequest const API = 'https://api.escuelajs.co/api/v1'; //API en mayúscula porque es una referencia que no va a cambiar function fetchData(urlApi, callback){ //urlApi: no confundir y colocar API let xhttp = new XMLHttppRequest(); //referencia a new XMLHttpRequest xhttp.open('GET', urlApi, true); //petición "obtener" con true para habilitarlo xhttp.onreadystatechange = function(event) { //escucha diferentes estados de la solicitud y conocer cuando está disponible la información if(xhttp.readyState === 4) { //si el estado ha sido completada la llamada if(xhttp.status === 200 ){ //el servido responde de forma correcta callback(null, JSON.parse(xhttp.responseText)); //dentro de xhttp.responseTex recibimos lo que entrega el servidor en texto y se hace la transformación en JSON } } else { const error = new Error('Error' + urlApi); return callback(error,null); //es null porque no se está regresando ningún dato } } xhttp.send(); }

    La nueva forma de hacer peticiones a una API es el fetch.

      Eber Eliud Rodriguez Alvarado

      Eber Eliud Rodriguez Alvarado

      student•
      hace 3 años

      tus comentarios complementan mucho las clases 👌

      Bryan Key

      Bryan Key

      student•
      hace 3 años

      Oye tu comentario sirve de MUCHISIMO! Tengo bastante tiempo en la industria y nunca habia detallado esos conceptos con detenimiento y reflexionado como tu lo has plasmado aca. (Los estados) Es super buena tu info! Gracias!

      PD: Saber esto (estados) nos facilita mucho el manejo de los mismos a la hora de consumir cualquier recurso con estos metodos.

      Go ahead Rodriguez!

    Angel Duarte

    Angel Duarte

    student•
    hace 3 años

    Viendo los comentarios, voy a intentar explicar más simple y paso a pasito la construcción de nuestra función fetchData.

    1. Primero debemos declarar e importar el paquete de XMLHttpRequest, que nos permite utilizar objetos (XHR) para interactuar con servidores (en este caso la API de Platzi) para esto hacemos:
    const XMLHttpRequest = require('XMLHttpRequest');
    • Lo que hace aquí "require()" es importar el módulo del id que le pasemos, además puede importar JSON y archivos locales. Pero necesitamos trabajar con XMLHttpRequest para manipular la API. |
    1. Declaramos como constante el url de la API:
    const API = 'https://api.escuelajs.co/api/v1/products';
    1. Ahora es momento de iniciar con la función principal que en términos simples es:
    function fetchData(urlApi, callback) { }
    • El parámetro 'urlApi' hace referencia a cualquier API con la cuál estemos trabajando, en este caso la FakeStore de Platzi.
    • El segundo parámetro 'callback' es donde posteriormente vamos a pasar una función como argumento para poder controlar el flujo de información de la API. |
    1. Necesitamos alguna manera de poder manipular las solicitudes que haremos para consultar los datos, para ello vamos a crear un espacio en memoria (una variable) en donde guardar el objeto (XHR) que importamos y gracias a los métodos ya construídos nos será mil veces más fácil desarrollar nuestra funcíon.
    let xhttp = new XMLHttpRequest();
    • Si estas familiarizado con OOP (Programación Orientada a Objetos) sabrás entonces que esto no es más que un constructor vacío, de la misma forma que:
    let perrito = new Animal(); 🐶 let manzana = new Fruta(); 🍎
    1. Muy bien, ya podemos utilizar nuestra variable 'xhttp' (en conjunto al callback) como un objeto para acceder y manipular la API. Primero debemos abrir una solicitud (un request) esto lo hacemos con el método '.open()'
    xhttp.open('GET', urlApi, true);
    • Ahora bien el primer parámetro es el tipo de solicitud que vamos a realizar, pudo haber sido "POST", "PUT", "DELETE". Pero vamos a utilizar "GET" 😎
    • El segundo parámetro es la url de la API a la cuál le vamos a realizar el request.
    • Último y tercer parámetro recibe un booleano para indicarle si vamos a utilizar asíncronismo o no, tal simple como TRUE o FALSE según el caso.

    Todo bien hasta aquí ¿cierto?, toma un pequeño descanso para repasar todo lo que has aprendido, que lo siguiente es un poquito más complejo.


    |

    1. Vamos a hacer una función anónima para verificar que el request de los datos ha salido con éxito y en caso de un tener error hacer registro de éste. Para ello nos vamos a apoyar de la propiedad de '.onreadystatechange' ésta llamará a la función cada que el readyState cambie (readyState retorna el número del estado en dónde se encuentra el request)
    xhttp.onreadystatechange = function (e) { }
    • Ahora bien el ciclo de vida del readyState es el siguiente:
      readyState
      Entonces debemos parar en '4' cuando la operacion ha sido completada
    if (xhttp.readyState === 4) { } ✅
    • Una vez completado con éxito necesitamos saber que tipo de respuesta nos entregó el servidor, así que volvemos a verificar con un ' if ' la propiedad '.status' según el tipo de respuestas:
      Entonces el if nos queda de la siguiente manera:
    if (xhttp.readyState === 4) { if (xhttp.status === 200) { } ✅ } ✅
    • ¡Ya comprobamos que tanto el request como el response hayan sido exitosos! Ahora podemos invocar nuestro callback (función por definir más tarde para manipular los datos)
    if (xhttp.readyState === 4) { if (xhttp.status === 200) { callback(null, JSON.parse(xhttp.responseText)); } ✅ } ✅

    ¿Y por qué tiene tantos parámetros el callback si aún nisquiera lo hemos definido? 🤔 Mira te explico:

    • El primero vamos a utilizarlo en caso de que se presente un error, pero como ya hemos verificado eso podemos simplemente dejarlo como un 'null'.
    • En el segundo usamos la función 'JSON.parse()' para convertir en datos que podamos controlar el texto que nos retorna la propiedad '.responseText' después de hacer el request.

    Listo🥳, dejamos preparado nuestro callback sin errores y con la información "traducida" para cualquier momento en el que necesitemos usarla. Pero (sep, siempre hay un 'pero') ¿Y si el request no es exitoso?¿Qué va a pasar con nuestra función?😔

    • Hay que regresarnos al primer if y utilizar la estructura de else para que en caso de haber un error registrarlo y enviarlo al callback (donde antes habiamos puesto 'null') y ahora pasar el null en la parte de los datos, ya que nunca pudo consultarlos.
    if (xhttp.readyState === 4) { if (xhttp.status === 200) { callback(null, JSON.parse(xhttp.responseText)); ✅ } ✅ } else ❌ { const error = new Error('error' + urlApi); return callback(error, null); }
    1. 🏆 ¡¡ Acabamos la función !! 🏆 Ya solo resta utilizar el método '.send()' después de procesar los datos para enviar el request al server (API)
    xhttp.send();

    Cualquier feedback es bien recibido para complementar mis conocimientos y el de cualquiera que lea esto.


    ⚠️(BONUS)⚠️

    Para no usar "Magic numbers" se pueden declarar los estados a verificar como constantes, les dejo mi código completo

    const XMLHttpRequest = require('XMLHttpRequest'); const API = 'https://api.escuelajs.co/api/v1/products'; const DONE = 4; const OK = 200; function fetchData(urlApi, callback) { let xhttp = new XMLHttpRequest(); xhttp.open('GET', urlApi, true); xhttp.onreadystatechange = function (e) { if (xhttp.readyState === DONE && xhttp.status === OK) { callback(null, JSON.parse(xhttp.responseText)); } else { const error = new Error('error' + urlApi); return callback(error, null); } } xhttp.send(); }
      César Augusto Cortés Labrada

      César Augusto Cortés Labrada

      student•
      hace 3 años

      Gran aporte. Me ha ayudado a entender mejor.

      Andrea Alejandra Martínez Garnica

      Andrea Alejandra Martínez Garnica

      student•
      hace 3 años

      Muchas gracias!! Tu comentario es muy valioso.

    Cesar Smith

    Cesar Smith

    student•
    hace 3 años

    No entendi para nada esta clase, siento que lo explica de manera muy tecnica con conceptos que aun no he aplicado en lo q llevo de aprendizaje de JS. Trato de hacer analogias para entenderlos y no logro, si alguien tiene una curso previo q pueda tomar para poder llevar el ritmo del prof se lo agradeceria

      Luz Sthephany Granados Castro

      Luz Sthephany Granados Castro

      student•
      hace 3 años

      🚩😀 Mira la documentación de xmlhttprequest quizás pueda ayudarte un poco a entender mejor la clase, ya que como se trata de asíncrona es necesario consumir un API para entender un poco como son los llamados y las demoras que esto implica en el hilo de ejecución del código ⏱ https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

      Jose Alfredo Cano Hernandez

      Jose Alfredo Cano Hernandez

      student•
      hace 3 años

      Si man si te entiendo, a mi en lo personal no me gustan mucho las clases con el por la misma razón, lo hace todo de una manera muy técnica no te abrumes, sigue con los videos y mas adelante algo te va a hacer "click", tal vez en otro curso y en ese momento te regresas y te aseguro que vas a entender, a mi me paso con el curso de nico de consumo de apis en angular... con el entendí esto una vez que se llevo a la practica.

    Giannina Stefania Baccelliere Mancilla

    Giannina Stefania Baccelliere Mancilla

    student•
    hace 3 años

    Para mi fue casi chino.... pero seguiré estudiando para aprender!

      Fabricio Aguilar

      Fabricio Aguilar

      student•
      hace 3 años

      Ahora no me siento solo, estamos igual, espero que hayas logrado entenderlo! 😅

      Sebastian Mera

      Sebastian Mera

      student•
      hace 3 años

      Ya somos tres pero vamos que si se puede 💪

    Julian Ward

    Julian Ward

    student•
    hace 3 años

    Esta clase me dejo mas dudas que certezas asi que les dejo un video que me ayudo a entederlo:

    https://www.youtube.com/watch?v=TF-fwphqt7g&ab_channel=GermanRodriguez

      Keinner Ross Durantt Rodríguez

      Keinner Ross Durantt Rodríguez

      student•
      hace 3 años

      Gracias por dejar ese video, explicó TODAS las dudas que me surgieron de esta clase, Oscar debió explicar más " que" de cada cosa, y no asumir que se sobreentiende.

      https://developer.mozilla.org/es/docs/Web/API/XMLHttpRequest

      Dejo este link que explica a XMLHttpRequest, espero les sirva, igual me ayudó.

      Matias Diaz

      Matias Diaz

      student•
      hace 3 años

      Excelente! Este aporte tendría que estar mas arriba! Muchas gracias!

    Lucas Aristizábal

    Lucas Aristizábal

    student•
    hace 3 años

    justo ayer acabé el curso viejo de asincronismo y justo hoy sale el nuevo 🙂

      Oscar Barajas Tavares

      Oscar Barajas Tavares

      Team Platzi•
      hace 3 años

      A repasar los conceptos dentro de esta renovación.

      Gaston Blanco

      Gaston Blanco

      student•
      hace 3 años

      Te entiendo, yo lo hice a 1 mes al viejo. Pero a aca estoy repasando las cosas que no me quedaron claras.

    Mauricio Montenegro

    Mauricio Montenegro

    student•
    hace 3 años

    TERRIBLE esta clase, como consejo se debería estructurar de mejor manera la clase, hay conceptos que nunca se los vio en las clases pasadas y eso hace que se produzcan confusiones, se debería mejorar ese aspecto.

      Esteban Sanabria

      Esteban Sanabria

      student•
      hace 2 años

      completamente de acuerdo

    Emerson David Cabrera Salas

    Emerson David Cabrera Salas

    student•
    hace 3 años

    Bueno, venía bien emocionado entendiendo conceptos complejs y nuevos para mí del asincronismo, pero en esta clase quedé bien perdido, no domino nada de lo que dice el profe, escribía el código pero sin entender bien qué es lo que estoy haciendo. Seguiré investigando a ver si logro captar la idea.

      Cecilio Cauich

      Cecilio Cauich

      student•
      hace 3 años

      Las clases que he visto de él han sido siempre lo mismo. Y este curso es nuevo por lo que esperaba que leyendo los comentarios mejorarías sus clases pero no.

      Kevin Harold Gutierrez Ramirez

      Kevin Harold Gutierrez Ramirez

      student•
      hace 3 años

      Estoy igual que tú. Toca investigar, aprender, practicar por otro lado y regresar a este curso cuando dominemos esos conceptos.

      Yo lo tomo como mini retos para seguir aprendiendo.

      Te recomiendo cambiar de perspectiva cada vez que te encuentres en esta zona(perdido, igual que yo), creo que así es mucho mejor y hace más llevadero los cursos. SUERTE BRO!!!! A meterle puche!!!

    Cristian Leonardo Acero Mancipe

    Cristian Leonardo Acero Mancipe

    student•
    hace 3 años
      Porfirio González López

      Porfirio González López

      student•
      hace 3 años

      Gran complementación

    Paul Martin Vargas Portugal

    Paul Martin Vargas Portugal

    student•
    hace 3 años

    Para obtener el JSON se utilizará un API llamado XMLHttpRequest (a menudo llamado XHR). Éste en un objeto JavaScript muy útil que permite realizar solicitudes de red para recuperar recursos desde un servidor vía JavaScript (por ejemplo: imágenes, texto, JSON, incluso código HTML), con lo que es posible actualizar pequeñas secciones de contenido sin tener que volver a cargar la página entera. Con ello se obtienen páginas web más interactivas, pero está fuera del alcance de este artículo entrar en detalle.

    1 Para empezar, se debe almacenar la URL del JSON que se quiere recuperar en una variable. Agregue lo siguiente al final del código JavaScript:

    const requestURL = 'https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json';

    2 Para crear una solicitud, se necesita crear una nueva instancia de objeto de solicitud desde el constructorXMLHttpRequest, utilizando la palabra clave new. Agregue lo siguiente a continuación de la última línea:

    const request = new XMLHttpRequest();

    3 Ahora es necesario abrir una nueva solicitud utilizando el método open(). Agregue la siguiente línea:

    request.open('GET', requestURL);

    Esto requiere al menos dos parámetros — Existen otros parámetros opcionales disponibles. Sólo se requieren los dos obligatorios para este ejemplo:

    El método HTTP a usar cuando se hace una solicitud en red. En este caso GET es adecuado, dado que sólo se estan recuperando algunos datos simples. La URL a la que se realiza la solicitud — esta es la URL del archivo que se almacenó antes.

    4 Luego, agregue las siguientes dos lineas — establecemos el responseType a JSON, de esta forma ese XHR sabe que el servidor estará retornando JSON y que esto debería ser convertido en segundo plano en un objeto JavaScript. Entonces se envía la solicitud con el método send():

    request.responseType = 'json'; request.send();

    5 La última parte de esta sección comprende la espera por la respuesta a retornar desde el servidor y luego, manejarla. Agregue el siguiente código bajo el código previo:

    request.onload = function() { const superHeroes = request.response; populateHeader(superHeroes); showHeroes(superHeroes); }

    En este punto se está almacenando la respuesta a la solicitud (disponible en la propiedad response) en una variable llamada superHeroes; esta variable ahora contendrá el objeto JavaScript basado en el JSON. Luego se pasa el objeto como argumento a dos funciones — la primera llenará el <header> con los datos correctos, mientras la segunda creará una tarjeta de información para cada héroe en el equipo y la insertará en <section>.

    Se ha contenido el código en un manejador de eventos que se activa cuando se dispara el evento de carga (ver onload) — esto es porque el evento de carga se dispara cuando la respuesta ha sido retornada de forma exitosa; de esta manera se garantiza que request.response estará disponible cuando se intente hacer algo con ella.

      Markin Piero Pulache Guarniz

      Markin Piero Pulache Guarniz

      student•
      hace un año

      gracias paul

    Luis Hernando Sendoya Serrato

    Luis Hernando Sendoya Serrato

    student•
    hace 3 años

    ¿alguien prefiere usar fetch?

    Juan Luis Medina Coelho

    Juan Luis Medina Coelho

    student•
    hace 3 años

    Diojmío, ¿a alguien más le pasa que a veces no entiende nada de lo que está pasando y siente que no conecta nada de lo que está viendo con las clases pasadas? Me suele pasar, al final siempre logro entender pero no deja de darme vértigo cada vez que me pasa.

      Kevin Salazar

      Kevin Salazar

      student•
      hace 3 años

      Suele pasar, lo mejor en estos casos es estructurar todo lo que no entiendes y empezar a buscar, por aquí te dejo un módulo, con información de todo lo que estaremos viendo aquí.

    Fran L

    Fran L

    student•
    hace 3 años

    xhttp es un objeto instanciado de la clase XMLHttpRequest. Para ello que usamos el siguiente código:

    let xhttp = new XMLHttpRequest();

    una vez lo creamos, podemos ocupar sus atributos tales como :

    xhttp.open() xhttp.onreadystatechange() xhttp.readyState xhttp.status xhttp.send()
      Andrea Carolina Mora López

      Andrea Carolina Mora López

      student•
      hace 3 años

      y digamos la linea que hace al principio de

      const XMLHttpRequest = require ('xmlhttprequest');

      en realidad está llamando al paquete que contiene a esta clase ? o para que sirve esta linea ?

      Jorge Arias Argüelles

      Jorge Arias Argüelles

      student•
      hace 3 años

      @acmoral Hola! Lo que dices esta bien. 👌

      Un poc más es explicaciuón, por si es de ayuda....

      La primera linea sirve para importar al archivo, el paquete que previamente instalamos cuando escribimos npm install xmlhttprequest.

      const XMLHttpRequest = require ('xmlhttprequest');

      Con la anterior linea no estamos usando xmlhttprequest, por eso es necesario crear una instancia con la palabra reservada new, como lo hacemos al interior de la función fetchData().

      let xhttp = newXMLHttpRequest();
    Jonathan Guidi

    Jonathan Guidi

    student•
    hace 3 años

    Hola gente! Si, es complejo comprender como funciona XMLHTTPRequest en un principio, pero no se preocupen. Actualmente es más frecuente utilizar FETCH, puesto que es una API más actual y moderna que utiliza PROMESAS y nos permite hacer lo mismo (o más) y escribir menos código. Recomiendo este link para comprender mejor el tema ... https://lenguajejs.com/javascript/peticiones-http/xhr/

      Jorman Urbina

      Jorman Urbina

      student•
      hace 3 años

      bro super necesario este comentario. bien ahi

      Israel Iran Canul Chi

      Israel Iran Canul Chi

      student•
      hace 2 años

      Hoy 9/15/2023 me quede en shock cuando empezó a escribir el xmlhttprequest, y yo preguntándome por dentro ¿Por qué no uso Fetch?.

    Devi Amaolo

    Devi Amaolo

    student•
    hace 3 años

    de donde sale esa funcion callback que llamamos una vez que hacemos la validacion?

      Xavier Medina Veintimilla

      Xavier Medina Veintimilla

      student•
      hace 3 años

      Hola :D

      ¿Qué problema tienes? ¿En qué podemos ayudarte?

      Antonio Javier Colmenarez Gonzalez

      Antonio Javier Colmenarez Gonzalez

      student•
      hace 3 años

      también tengo esa duda

    Porfirio González López

    Porfirio González López

    student•
    hace 3 años

    Esta clase la siento como un partido de futbol con extraterrestres:

    . Sé qué están haciendo (jugando futbol, comprendo la lógica de la clase), pero no sé quiénes son, que hace, y por qué (Son extraterrestres jamás los había visto, hay muchos nuevos métodos que me pierdo) . Talvez no necesitamos saber todo eso (lo enseñan más adelante), pero como que al Profe le falto decir más sobre todos eso métodos .

    Todos los nuevos métodos

    • requiere();

    • open();

    • .onreadystatechange

    • .readyState

    • .status

    • .parse();

    • .responseText

    • .send();

    Mario José Yanez Sifontes

    Mario José Yanez Sifontes

    student•
    hace 3 años

    Hola compañeros, comparto mis apuntes por si le son de ayuda a alguien.

    Apuntes 1.png
    Apuntes 2.png

    Nunca paren de aprender! <3

      Porfirio González López

      Porfirio González López

      student•
      hace 3 años

      Buen aporte para como una introducción.

    Carlos Enrique Rocha Zamudio

    Carlos Enrique Rocha Zamudio

    student•
    hace 3 años

    para los compañeros que se encuentren un poco perdidos, les recomiendo verse el siguiente video el cual me explico perfectamente como funciona el XMLHttpRequest, es un poco largo pero vale la pena para poder entender esto https://www.youtube.com/watch?v=6CQrK1sS7WA&ab_channel=jonmircha

    Felipe Molano Corredor

    Felipe Molano Corredor

    student•
    hace 3 años

    La clase mas enredada que he visto la verdad, no me quedo claro nada, para ver esta clase hay que saber ya muchas cosas......

      Ermilo Joel Dorantes Uc

      Ermilo Joel Dorantes Uc

      student•
      hace 3 años

      Entiendo que lo etiquetaron como un curso básico. ¿Ya tienes nociones de lenguajes de programación?

    Héctor Haro Hermosillo

    Héctor Haro Hermosillo

    student•
    hace 3 años
    Captura de pantalla 2022-06-23 144756.jpg

    Se puede hacer la validación dentro del mismo IF.?

      Oscar Barajas Tavares

      Oscar Barajas Tavares

      Team Platzi•
      hace 3 años

      Si, todo es posible.

      Manuel Alejandro Jiménez Fuentes

      Manuel Alejandro Jiménez Fuentes

      student•
      hace 2 años

      puedo preguntar qué extesión de VSC ocupas para que las letras se vean neon?

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads