es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mi función de búsqueda asíncrona me lleva al endpoint al que hago un POST. Quiero que refresque la página desde la que hago el POST.

Mi función async fetch está incrustada en names.php y cuando activo la función me lleva al endpoint donde hace una petición con POST: change-name.php. Quiero quedarme en la página names.php pero actualizar esa página después de que se ejecute la función fetch.

Estoy haciendo clic en el span de abajo para abrir un campo de texto donde agrego un nombre y hago clic en el botón:

Esto funciona perfectamente bien. Y actualiza el nombre pero soy transportado a la página /change-name.php después de hacer clic en el botón AGREGAR.

Mi respuesta deseada es permanecer en la página original con una actualización después de que la función fetch se haya completado.

¿Cómo obtengo este resultado?

Función async function updateGuestName(paxid,name){
paxIDbody = ‘{“pxid”: “‘ + paxid + ‘”, “name”: “‘ + name + ‘”}’;
console.log(“PaxID:”, paxIDbody);
try {
const settings = {
method: “POST”,
headers: {
“Content-type”: “application/json; charset=UTF-8”
},
body: paxIDbody,
};
const response = await fetch(
“/change-name.php”,
settings
);
const data = await response.json();
console.log(“DATA: “,data);
} catch (error) {
console.log(“ERROR: “,error);
}
}

Función addGuestName(obj) {
const itemClicked = obj;
const paxid = obj.id;
const addPaxName = itemClicked.nextElementSibling;
const addPaxNameButton = itemClicked.nextElementSibling;
addPaxNameButton.style.display = ‘inline-block’;
var addPaxNameField = document.createElement(‘input’);
addPaxNameField.setAttribute(‘type’, ‘text’);
addPaxNameField.setAttribute(‘name’, ‘visitorNameSurname[]’);
addPaxNameField.setAttribute(‘placeholder’, ‘Ingrese Nombre y Apellido’);
itemClicked.parentNode.insertBefore(addPaxNameField, itemClicked.nextSibling);
addPaxNameField.setAttribute(“required”, “required”);
addPaxNameButton.addEventListener(‘click’, () => {
const name = addPaxNameField.value;
updateGuestName(paxid,name);
})
}

Mi endpoint PHP devuelve JSON después de la actualización de la BD:

header(‘Content-type:application/json;charset=utf-8’);
$myObj=new \stdClass();
$myObj->status = $status;
$myObj->message = $message;
$myJSON = json_encode($myObj);
echo $myJSON;

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Por ejemplo:

    async function updateGuestName(paxid,name){
    paxIDbody = '{\"pxid\": \"' + paxid + '\", \"name\": \"' + name + '\"}';
      console.log("PaxID:", paxIDbody);
      try {
        const settings = {
          method: "POST",
          headers: {
            "Content-type": "application/json; charset=UTF-8"
          },
          body: paxIDbody,
        };
        const response = await fetch(
          "/change-name.php",
          settings
        );
        const data = await response.json();
        console.log("DATA: ",data);
        window.location.reload();
      } catch (error) {
        console.log("ERROR: ",error);
      }
    }
    
    function addGuestName(obj) {
      const itemClicked = obj;
      const paxid = obj.id;
      const addPaxName = itemClicked.nextElementSibling;
      const addPaxNameButton = itemClicked.nextElementSibling;
      addPaxNameButton.style.display = 'inline-block';
      var addPaxNameField = document.createElement('input');
      addPaxNameField.setAttribute('type', 'text');
      addPaxNameField.setAttribute('name', 'visitorNameSurname[]');
      addPaxNameField.setAttribute('placeholder', 'Enter Name & Surname');
      itemClicked.parentNode.insertBefore(addPaxNameField, itemClicked.nextSibling);
      addPaxNameField.setAttribute("required", "required");
      addPaxNameButton.addEventListener('click', () => {
        const name = addPaxNameField.value;
        updateGuestName(paxid,name);
      })
    }
    

    Puedes usar el método window.location.reload() para permanecer en la página original con un refresco de página después de que se complete la función fetch.

Comments are closed.