⚡ Módulo 5 - APIs Dinámicas

AJAX con PHP y jQuery: APIs sin recargar

¿Quieres crear aplicaciones web más rápidas y dinámicas? En esta guía aprenderás a usar AJAX para enviar y recibir datos sin recargar la página, crear APIs RESTful en PHP y consumirlas con jQuery.

⏱️ ~12 min de lectura 🎯 Nivel: Intermedio 🔗 Con ejemplos de API real

AJAX (Asynchronous JavaScript and XML) permite actualizar partes de una página web sin necesidad de recargarla completa. Es ideal para formularios, cargas dinámicas y actualizaciones en tiempo real.

Introducción a AJAX y su uso con JavaScript y jQuery

AJAX (Asynchronous JavaScript and XML) permite actualizar partes de una página web sin necesidad de recargarla completa. Es ideal para:

  • Formularios que se envían sin recargar
  • Cargas dinámicas de contenido (infinite scroll)
  • Actualizaciones en tiempo real (notificaciones, chats)
  • Búsquedas con autocompletado
💡 Consejo profesional

AJAX no es una tecnología nueva, sino una técnica que combina JavaScript, el objeto XMLHttpRequest (o Fetch API) y un backend que responde con JSON.

Crear una API RESTful en PHP

Una API RESTful expone datos del backend para que el frontend los consuma. Aquí un ejemplo básico:

🔌 Ejemplo: API básica en PHP
<?php
// api.php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *"); // Para desarrollo

$method = $_SERVER['REQUEST_METHOD'];

if ($method === 'GET') {
    $data = [
        'mensaje' => 'API funcionando',
        'estado' => 'ok',
        'timestamp' => time()
    ];
    echo json_encode($data, JSON_PRETTY_PRINT);
} elseif ($method === 'POST') {
    // Leer datos JSON enviados
    $input = json_decode(file_get_contents('php://input'), true);
    
    // Procesar datos (ejemplo: guardar en BD)
    $response = [
        'mensaje' => 'Datos recibidos',
        'recibido' => $input
    ];
    echo json_encode($response);
}
?>

Resultado: Una API que responde con JSON según el método HTTP usado.

GET https://tudominio.com/api.php

Consumir una API desde el Frontend

Desde JavaScript o jQuery, puedes llamar a tu API así:

🔹 Con jQuery (simplificado)

$.ajax({
    url: 'api.php',
    type: 'GET',
    dataType: 'json',
    success: function(response) {
        console.log(response.mensaje);
        // Actualizar DOM
        $('#resultado').text(response.mensaje);
    },
    error: function(xhr, status, error) {
        console.error('Error:', error);
        swal("Error", "No se pudo conectar con la API", "error");
    }
});

🔹 Con Fetch API (nativo, sin jQuery)

fetch('api.php')
    .then(response => response.json())
    .then(data => {
        console.log(data.mensaje);
        document.getElementById('resultado').textContent = data.mensaje;
    })
    .catch(error => {
        console.error('Error:', error);
        swal("Error", "No se pudo conectar", "error");
    });

Enviar datos al servidor con AJAX

Ejemplo: enviar un formulario sin recargar la página:

📤 Ejemplo: Formulario con AJAX + SweetAlert
$('#miFormulario').on('submit', function(e) {
    e.preventDefault(); // Evita recarga tradicional
    
    $.ajax({
        url: 'procesar.php',
        type: 'POST',
        data: $(this).serialize(),
        dataType: 'json',
        beforeSend: function() {
            // Mostrar loading
            $('#btnEnviar').prop('disabled', true).text('Enviando...');
        },
        success: function(response) {
            if (response.status === 'success') {
                swal("¡Éxito!", response.message, "success");
                $('#miFormulario')[0].reset(); // Limpiar formulario
            } else {
                swal("Error", response.message, "error");
            }
        },
        error: function(xhr, status, error) {
            swal("Error", "No se pudo procesar la solicitud", "error");
        },
        complete: function() {
            // Restaurar botón
            $('#btnEnviar').prop('disabled', false).text('Enviar');
        }
    });
});
⚠️ Nota de seguridad

Nunca confíes en validaciones solo del frontend. Siempre valida y sanitiza los datos en el backend (PHP) antes de procesarlos o guardarlos.

Manejo de respuestas y errores

Siempre valida la respuesta del servidor para evitar errores:

success: function(response) {
    try {
        // Si la respuesta no es JSON, intentar parsear
        var data = typeof response === 'string' ? JSON.parse(response) : response;
        
        if (data.status === 'success') {
            swal("Éxito", data.message, "success");
            // Redirigir o actualizar UI
        } else {
            swal("Error", data.message || 'Error desconocido', "error");
        }
    } catch (e) {
        console.error('Error parseando respuesta:', e);
        swal("Error", "Respuesta inválida del servidor", "error");
    }
}

Pruebas con Postman

Postman es una herramienta esencial para probar APIs antes de integrarlas al frontend:

  • Descarga Postman: postman.com
  • Crea una nueva petición con método GET/POST
  • Ingresa la URL de tu API: tudominio.com/api.php
  • Envía la petición y verifica la respuesta JSON
  • Prueba diferentes métodos: GET, POST, PUT, DELETE
🔍 Tip de depuración

En Postman, usa la pestaña "Tests" para escribir validaciones automáticas: pm.response.to.have.jsonBody("estado");

¿Qué sigue después de AJAX?

Este es el quinto paso del desarrollo full-stack. En el siguiente módulo, aprenderás a organizar tu código con el patrón MVC en PHP y mejorar la seguridad de tus aplicaciones.

📚 ¿Quieres la versión completa del libro?

Esta guía es una versión resumida del libro "Programación Full-Stack", que incluye ejercicios resueltos, códigos listos y explicaciones profundas de APIs y seguridad.

Comprar en Amazon →

¿Tienes dudas sobre AJAX, APIs o jQuery? ¡Déjalas en los comentarios! 👇