elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Fetch Api CRUD
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Fetch Api CRUD  (Leído 1,221 veces)
iCoke

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Fetch Api CRUD
« en: 6 Febrero 2019, 00:02 am »

Lo que estoy intentando es dejar de usar JQUERY para las consultas asincronas, para eso decidi usar la API Fetch de JS , mi problema consiste en que una vez devuelto los datos de la BD , a la tabla en la cual se muestran estos datos no le funciona el boton "EDITAR"


index.php aca listo los productos con sus respectivos botones EDITAR y ELIMINAR (FUNCIONAN)

Código:
[code=html4strict]<div id="verTablaPremium">Tabla Premium</div>
              <div class="contenedor_tabla">
                <table class="contenedor_tabla_table">
                  <tr>
                    <th>Foto</th>
                    <th>Nombre</th>
                    <th>Pack</th>
                    <th>Desc Menu</th>
                    <th>Desc Producto</th>
                    <th>Precio</th>
                    <th>Editar</th>
                    <th>Eliminar</th>
                  </tr>
                  <?php
                  $item = null;
                  $valor = null;
                  $cPacks = ControladorPacks::ctrMostrarPacks($item,$valor);

                  foreach ($cPacks as $key => $value) {
                        echo '<tr>
                              <td><img src="./vistas/img/packspremium/'.$value["nombre"].'+'.$value["pack"].'/320/'.$value["foto"].'"></td>
                              <td>'.$value["nombre"].'</td>
                              <td>'.$value["pack"].'</td>
                              <td>'.$value["descripcion"].'</td>
                              <td>'.$value["descripciondos"].'</td>
                              <td>'.$value["precio"].'</td>
                              <td><button class="botones__editar btnEditarPack"  idPack="'.$value["id_premium"].'"> <i class="fas fa-pencil-alt"></i></button></td>
                              <td><button class="botones__eliminar btnEliminarBurguer" idBurguer="'.$value["id_premium"].'" fotoBurguer="'.$value["foto"].'" nombreBurguer="'.$value["nombre"].'" pack="'.$value["pack"].'"> <i class="fas fa-trash-alt"></i></button> </td>
                              </tr>';
                  }
                  $borrarBurguer = new ControladorPacks();
                  $borrarBurguer -> ctrBorrarBurguer();
                  ?>
                </table>
[/code]


Luego en mi JS para hacer la llamada a la db tengo esto.

Código:
[code=javascript]var formulario = document.getElementById("formEnkel")
var tr = document.getElementById("refresh")
let boton = Array.from(document.querySelectorAll('.btnEditarPackEnkel'))

let evento = e =>{
  /* relleno el formulario del modal con los datos traidos de la BD */
  if(e.target.tagName == "I"){
    idPackEnkel = e.target.parentNode.getAttribute("idPackEnkel");
 
    let datos = new FormData(formulario);
 
    datos.append("idPackEnkel", idPackEnkel);
 
    //console.log(datos.get('idPackEnkel'))
 
    fetch("ajax/enkel.ajax.php",{
      method:"POST",
      body:datos
    })
    .then( res => res.json())
    .then( data => {
      document.getElementById('fotoActualBEnkel').value = data.foto
      document.getElementById('editarNombrePEnkel').value = data.nombre
      document.getElementById('editarDescripcionEnkel').value = data.descripcion
      document.getElementById('editarDescripcionDosEnkel').value = data.descripciondos
      document.getElementById('id_enkel').value = data.id_enkel
      document.getElementById('nombreActualEnkel').value = data.nombre
     
      if(data.foto != ""){
        document.querySelector('.previsualizarBEnkel').setAttribute("src","./vistas/img/packsenkel/"+data.nombre+"/320/"+data.foto+"")
      }
    })
  }
}


tr.addEventListener('click',evento,true);

   
/* CUANDO hago el submit traigo la respuesta de la db para llenar la tabla con los datos actualizados  */

formulario.addEventListener('submit',(e) =>{
  e.preventDefault();
  let datos = new FormData(formulario);

  fetch("ajax/submit.ajax.php",{
    method:"POST",
    body:datos
  })
  .then( res => res.text())
  .then(data =>{
   formulario.reset();
   tr.innerHTML = data;


  })

 
})
[/code]


SUBMIT.AJAX.PHP

Código:
[code=php]<?php

require_once "../controladores/enkel.controlador.php";
require_once "../modelos/enkel.modelo.php";

$e = new ControladorPacksEnkel();
$e->ctrEditarEnkel();
[/code]

en el controlador que devuelve todos los datos actualizados en cuestion tengo esto

Código:
[code=php]$respuesta = ModeloPacksEnkel::mdlEditarEnkel($tabla, $datos);

if($respuesta == "ok"){
  $item = null;
                  $valor = null;
  $ePacks = ControladorPacksEnkel::ctrMostrarPacksEnkel($item,$valor);
  echo ' <tr>
  <th>Foto</th>
  <th>Nombre</th>
  <th>Desc Menu</th>
  <th>Desc Prod</th>
  <th>Precio</th>
  <th>Editar</th>
  <th>Eliminar</th>
</tr>';
foreach ($ePacks as $key => $value) {
echo '<tr>

                              <td><img src="./vistas/img/packsenkel/'.$value["nombre"].'/320/'.$value["foto"].'"></td>
                              <td>'.$value["nombre"].'</td>
                              <td>'.$value["descripcion"].'</td>
                              <td>'.$value["descripciondos"].'</td>
                              <td>'.$value["precio"].'</td>
                              <td><button class="botones__editar btnEditarPackEnkel"  idPackEnkel="'.$value["id_enkel"].'"> <i class="fas fa-pencil-alt"></i></button></td>
                              <td><button class="botones__eliminar btnEliminarBurguerEnkel" idBurguerEnkel="'.$value["id_enkel"].'" fotoBurguerEnkel="'.$value["foto"].'" nombreBurguerEnkel="'.$value["nombre"].'"> <i class="fas fa-trash-alt"></i></button> </td>
  </tr>

  ';
  };

}
[/code]


repito, la primera vez que apreto en editar funciona, despues hago el submit, los datos se muestran perfectamente pero el boton editar no funciona, lei algo de la propagacion de eventos y que con jquery se soluciona con el evento " .ON ". pero no le encuentro la solucion , desde ya muchas gracias.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crud Generator en Codeigniter
PHP
madpitbull_99 0 6,613 Último mensaje 6 Julio 2011, 20:28 pm
por madpitbull_99
Crud con Strut2 e hibernate
Java
jPallol1 2 1,936 Último mensaje 29 Marzo 2015, 18:34 pm
por Usuario Invitado
Ayuda con CRUD
Bases de Datos
veloso97 1 2,527 Último mensaje 13 Mayo 2018, 21:48 pm
por vicram10
añadir contenido en un archivo JSON externo a traves de JS con fetch()
Desarrollo Web
Drakaris 3 2,485 Último mensaje 2 Marzo 2021, 15:03 pm
por Drakaris
fetch en clase me devuelve undefined | javascript
Desarrollo Web
Drakaris 3 3,882 Último mensaje 16 Mayo 2021, 00:37 am
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines