No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creación de conexión API REST con JavaScript

7/13
Recursos

¿Cómo conectar un formulario con una API en JavaScript?

Para interactuar de manera efectiva con una API, es esencial establecer una conexión correctamente desde el lado del cliente. Este proceso puede parecer desafiante al principio, pero con una estructura bien definida, puedes lograrlo sin problemas. A continuación, te explicamos cómo conectar un formulario web con una API usando JavaScript.

¿Cómo estructuramos nuestros archivos y carpetas?

Antes de escribir el código JavaScript necesario, es crucial organizar adecuadamente los archivos y carpetas del proyecto. Este paso preliminar facilitará las referencias y el trabajo en equipo.

  1. Crear una carpeta llamada assets dentro de tu directorio public.
  2. Generar una subcarpeta llamada js donde se almacenará el archivo registro.js.
  3. Dentro de registro.js, se escribirá el código que manejará la interacción entre el formulario y la API.

¿Cómo inicializamos y configuramos nuestro JavaScript?

Una vez que tengas configurada la estructura de carpetas, puedes comenzar a escribir el código en registro.js. Inicia escuchando eventos y manipula el DOM adecuadamente:

document.addEventListener('DOMContentLoaded', () => {
    const form = document.querySelector('#singin'); // Selector del formulario
    form.addEventListener('submit', (e) => {
        e.preventDefault(); // Prevenir la acción por defecto del formulario
        let datos = new FormData(form); // Capturar los datos del formulario
        let datosParse = new URLSearchParams(datos); // Formato que WordPress entiende

        fetch('http://yoursite.com/wp-json/registro', {
            method: 'POST',
            body: datosParse
        })
        .then(res => res.json())
        .then(json => console.log(json))
        .catch(error => console.log(`Hay un error: ${error}`));
    });
});

¿Cómo registramos y cargamos el script en WordPress?

Es vital que el archivo JavaScript se cargue solo cuando se necesite, en este caso, cuando el shortcode específico de WordPress que lo requiere está presente:

  1. Registrar el script en WordPress: Utiliza wp_register_script para asegurarte de que está disponible sin encolarlo inmediatamente.

    wp_register_script('plzRegistro', plugins_url('assets/js/registro.js', __FILE__));
    
  2. Encolar el script solo cuando sea necesario: Es recomendable que esto ocurra cuando se renderiza el shortcode relacionado.

    function enqueue_script() {
        wp_enqueue_script('plzRegistro');
    }
    

¿Cómo verificamos que el script se ha cargado correctamente?

Siempre es buena práctica asegurarse de que los scripts se están ejecutando como se espera. Agrega una simple línea de console.log para ver la ejecución en las herramientas de desarrollo del navegador.

console.log('registro cargado');

Actualizando tu página y revisando la consola de desarrolladores, deberías ver el mensaje de que el script se cargó exitosamente.

¿Qué sería el siguiente paso?

Ahora que tienes el formulario conectado a la API, el siguiente paso natural sería desarrollar la lógica en WordPress para procesar los datos al crear un nuevo usuario. Esto involucrará trabajar directamente con las acciones y filtros de WordPress para manejar el backend.

¡Sigue así! Estás en el camino correcto hacia la creación de aplicaciones web dinámicas y funcionales. A medida que continúas aprendiendo y practicando, tus habilidades solo continuarán aumentando.

Aportes 11

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Conectar API

Código para conectar formulario con el API

public/assets/js/registro.js

window.addEventListener("DOMContentLoaded",function(){
    console.log("registro cargado") // Debugear si el registro fue cargado
    let $form = document.querySelector("#signin");

    $form.addEventListener("submit",function(e){
        e.preventDefault();

        let datos = new FormData($form);
        let datosParse = new URLSearchParams(datos); // Parsear datos
        
        // fetch configurado para devolver un JSON (mensaje al consultar)
        fetch("https://yardsales.plz/wp-json/plz/registro", // Ruta estática por lo pronto
        {
            method: "POST",
            body: datosParse
        }
        )
        .then(res=>res.json())
        .then(json=>{
            console.log(json)
        })
        .catch(err=>{ // Catch (error personalizado)
            console.log(`Hay un error: ${err}`)
        })

    })
    
})

Cargar JS en el formulario: public/shortcode/form-registro.php

<?php 

//Registrar script
function plz_script_registro(){
    wp_register_script("plz-registro",plugins_url("../assets/js/registro.js",__FILE__));
}

add_action("wp_enqueue_scripts", "plz_script_registro");

function plz_add_register_form(){
    //Poner script en cola
    wp_enqueue_script("plz-registro");
		//...

Para los que no les cargue el archivo .js
En el archivo form-registro.php, la función
wp_enqueue_script(“plz-registro”);
debe ser llamada dentro del hook “wp_enqueue_scripts”. De otra forma no cargará el js (al menos así fue en mi caso)

El código de el archivo public/shortcode/form-registro.php quedaría así

<?php 
function plz_script_registro(){
    wp_register_script("plz-registro",plugins_url("../assets/js/registro.js",__FILE__));
    wp_enqueue_script("plz-registro");
}

add_action("wp_enqueue_scripts", "plz_script_registro");


function plz_add_register_form(){
	plz_script_registro();

    $response = '
    <div class="signin">
        <div class="signin__container">
            <h1 class="sigin__titulo">Register</h1>
            <form class="signin__form" id="signin">
                <div class="signin__name name--campo">
                    <label for="Name">Name</label>
                    <input name="name" type="text" id="Name">
                </div>
                <div class="signin__email name--campo">
                    <label for="email">Email</label>
                    <input name="email" type="email" id="email">
                </div>
                <div class="signin__pass name--campo">
                    <label for="password">Password</label>
                    <input name="password" type="password" id="password">
                </div>
                <div class="signin__submit">
                    <input type="submit" value="Create">
                </div>
            </form>
        </div>
    </div>
    ';

    return $response;

}

add_shortcode("plz_registro","plz_add_register_form");```

Lo logre de esta manera ☺️

window.addEventListener("DOMContentLoaded", function () {
  let $form = document.querySelector("#ypw_form_login");

  $form.addEventListener("submit", async function (e) {
    e.preventDefault();

    // let datos = new FormData($form);
    // let datosParse = new URLSearchParams(datos); // Parsear datos

    let formData = new FormData($form);

    // fetch configurado para devolver un JSON (mensaje al consultar)

    try {
      res = await fetch(
        "url-my-api-wp-json", // Ruta estática por lo pronto
        {
          method: "POST",
          body: formData,
        }
      );

      console.log(await res.json());
    } catch (error) {
      console.log(`Hay un error: ${error}`);
    }
  });
});

Tipico, tomo el curso lo sigo paso a paso y no me corre. pero agarro el codigo completo del profesor y si corre.

Se podría haber explicado los AJAX ya que usa la función FETCH

Si les sale este error en la consola:
GET net::ERR_ABORTED 404 (Not Found)
Lo que hay que hacer es borrar la siguiente linea del footer del tema:
<script src="assets/js/script.js"></script>

Para la gente que no le funciono el console.log de registro cargado, fijense muy bien. Yo no continue el proyecto anterior y empecé uno desde cero, pero hay que tener un header.php y un footer.php (al estilo wordpress: con wp_head(), wp_footer, etc) para que esto funcione, puesto que si no lo tenemos no va a funcionar

No me reproduce el vídeo :(, ya cambie de server algunas veces y nada :(

Unas pequeñas acotaciones para entender un poco mas como funcionan estas cosas de API
URLSearchParams
Fetch
register_rest_route

Petición fetch()

Estoy creando un plugin para el admin de wordpress, hice un ligero cambio para que se cargara correctamente el script

add_action('admin_enqueue_scripts','my_script' );//admin_enqueue_scripts se usó en lugar de wp_enqueue_scripts

Según leí wp_enqueue_scripts carga el script en el frontend de la pagina y el admin_enqueue_scripts permite cargarlos al panel de administrador