Guía Práctica: El Objeto Xmlhttprequest

XMLHttpRequest ha transformado el web desde 2015, permitiendo que páginas se actualicen sin recargas molestas. Esta Guía Práctica: El Objeto XMLHttpRequest te muestra cómo usarlo en JavaScript para requests dinámicos.

¿Qué es XMLHttpRequest?

Piensa en XMLHttpRequest, o XHR para amigos, como tu mensajero personal al servidor.
Pide datos sin interrumpir la página.

No solo XML, como dice su nombre.
Maneja JSON, texto, blobs.

💡 Si estás sumergiéndote en el mundo de la IA, descubre por qué Python brilla en inteligencia artificial y cómo impulsará tus proyectos con eficiencia y simplicidad.

¿Necesitas eventos del servidor? Usa EventSource.
Para chat full-duplex, WebSockets gana.

XHR brilla en apps antiguas o workers web.
Disponible en navegadores modernos desde julio 2015.

El Objeto Xmlhttprequest

Creando tu primer XMLHttpRequest

Empecemos simple. Crea uno con el constructor.
let xhr = new XMLHttpRequest();

💡 Si estás explorando el mundo de la tecnología portátil, no te pierdas esta guía esencial sobre definición y características de dispositivos móviles, perfecta para entender sus fundamentos clave.

Llama al constructor antes de todo.
Sin él, nada funciona.

Abre la conexión con xhr.open('GET', 'url');.
Método y URL obligatorios.

Envía con xhr.send();.
Para POST, pasa datos: xhr.send(body);.

¿Listo para probar? Copia esto ya.
Verás magia en consola.

let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data');
xhr.send();

💡 Si estás explorando carreras en el mundo de la tecnología y la innovación, no te pierdas un repaso completo a las ramas más demandadas de la ingeniería, ideal para decidir tu especialidad con total claridad.

Propiedades clave de XMLHttpRequest

XHR hereda de EventTarget.
Muchas propiedades leen el estado.

readyState: Número del progreso (0-4).
response: Datos según tipo.

responseText: String del body.
Útil si falla parseo.

responseType: Define formato (‘json’, ‘blob’).
Evita sorpresas.

💡 Si te apasiona la tecnología y buscas potenciar tu carrera, explora los beneficios clave de aprender a programar para desbloquear oportunidades infinitas en el mundo digital.

PropiedadDescripciónTipo
readyStateEstado actualNúmero (0-4)
responseCuerpo respuestaVaría
statusCódigo HTTPNúmero
timeoutLímite msNúmero

status: 200 OK, 404 no encontrado.
statusText: “OK” o razón.

withCredentials: Cookies en cross-site.
Actívalo con true.

Los estados: entendiendo readyState

readyState cuenta la vida del request.
0: No inicializado.

💡 Si eres desarrollador mobile y dudas entre plataformas, explora los pros y contras del ecosistema Android para devs para decidir con datos reales y optimizar tu flujo de trabajo.

1: Abierto, post-open().
2: Headers recibidos.

3: Cargando body.
4: Completado, listo.

¿Cuándo usarlo? En eventos como onreadystatechange.
Chequea if (xhr.readyState === 4 && xhr.status === 200).

Código típico:

xhr.onreadystatechange = function() {
  if (xhr.**readyState** === 4) {
    console.log('¡Listo!');
  }
};

No olvides status 200-299 para éxito.
Errores como 500? Maneja con gracia.

Manejo de eventos y respuestas

XHR es EventTarget.
Escucha load, error, progress.

xhr.onload = () => { datos = xhr.response; };
Más limpio que onreadystatechange.

Para upload: upload property.
xhr.upload.onprogress = updateBar();.

responseXML: Document si XML/HTML.
No en workers.

¿Qué pasa en HTTP/2? statusText vacío.
Usa status solo.

Pregúntate: ¿JSON esperado? Set responseType = 'json';.
Evita JSON.parse(xhr.responseText).

Ejemplo práctico: Fetching JSON

Imagina cargar usuarios de API.
Usa XHR para lista dinámica.

Paso uno: Crea y configura.

let xhr = new **XMLHttpRequest**();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/users');
xhr.responseType = 'json';
xhr.timeout = 5000; // 5 seg

Dos: Eventos.

xhr.onload = function() {
  if (xhr.status === 200) {
    let users = xhr.response;
    users.forEach(user => console.log(user.name));
  }
};
xhr.onerror = () => console.error('Error!');

Tres: Envía.
xhr.send();

¡Lista en página!
Sin recarga.

¿POST? Cambia a 'POST', headers xhr.setRequestHeader('Content-Type', 'application/json');.
xhr.send(JSON.stringify(data));.

Prueba con form submit.
Adiós recargas.

Comparación con Fetch API

XHR vs Fetch: ¿Cuál elegir?
Fetch es moderno, Promise-based.

XHR gana en IE antiguos o upload progress.
Fetch más legible.

AspectoXHRFetch
PromesasNo nativo
Abortabort()AbortController
ProgresoBuenoLimitado
Browser supportTodoModerno

¿Transición? Usa XHR si necesitas upload.
Sino, Fetch para futuro.

Humor: XHR es como teléfono fijo.
Funciona siempre, pero Fetch es smartphone.

Configuraciones avanzadas

Timeout: xhr.timeout = 10000; evita hangs.
Evento ontimeout.

Headers: setRequestHeader post-open.
No olvides Content-Type.

Cross-origin: withCredentials = true.
CORS debe permitir.

responseURL: URL final post-redirects.
Útil debug.

Workers: Sí, menos responseXML.
Service Workers: No.

Errores comunes y soluciones

¿Request no envía? Chequea open antes send.
Fácil olvido.

Status 0: CORS bloquea.
Ver dev tools.

Parse fail: Set responseType correcto.
O usa responseText.

No readyState 4: Espera evento.
Async por default.

Tip: Siempre xhr.abort() en unmount.
Evita leaks.

Pregunta: ¿Qué si servidor lento?
Timeout y retry logic.

Casos reales en apps

En dashboard: XHR carga charts data.
Progress bar para user feedback.

AJAX puro: Form validation servidor.
Sin page jump.

Legacy code: Migra despacio a Fetch.
XHR estable.

Ejemplo tabla dinámica:

// Carga y pinta tabla
xhr.onload = () => {
  let data = xhr.response;
  let table = document.getElementById('tabla');
  data.forEach(row => {
    let tr = table.insertRow();
    tr.insertCell(0).textContent = row.id;
  });
};

¿Ves? Poder simple.
Integra ya.

Mejores prácticas para XMLHttpRequest

Usa try-catch? No, eventos manejan.
Loggea status siempre.

Promises wrapper: Haz XHR promisificado.
Para async/await.

function fetchXHR(url) {
  return new Promise((resolve, reject) => {
    let xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.onload = () => resolve(xhr.response);
    xhr.onerror = reject;
    xhr.send();
  });
}

Genial para chains.
Moderniza sin romper.

Anticipo: ¿Seguridad? Sanitiza inputs.
HTTPS siempre.

Conclusión y próximos pasos

Dominaste XMLHttpRequest basics.
Práctica en proyectos reales.

Explora Fetch, Axios next.
Pero XHR base sólida.

Comparte tu primer request abajo.
¡Pregunta dudas! Esta Guía Práctica: El Objeto XMLHttpRequest solo empieza.