promesa
Entiendo, si el problema se presenta al intentar acceder a datos en la función abrirModalEditar, podría deberse a que la función se está ejecutando antes de que los datos se hayan cargado completamente. Para solucionarlo, puedes asegurarte de que la función abrirModalEditar espere a que los datos estén disponibles antes de intentar acceder a ellos.
Aquí hay una forma de hacerlo utilizando una promesa para asegurarnos de que abrirModalEditar se ejecute solo después de que los datos se hayan cargado correctamente:
<body> <div class="container"> <input type="hidden" name="carpeta" id="inputCarpeta" value="C-01/2015"> <table id="solicitudtabla" class="table"> <thead class="thead-dark"> <tr> <th>Id</th> <th>Carpeta</th> <th>Registro</th> <th>Solicitud</th> <th>Fecha de Registro</th> <th>Comentario</th> <th>Fecha de Vencimiento</th> <th>Estado</th> <th>Resolvio</th> <th>Fecha de Contesto</th> </tr> </thead> <tbody id="tablaBody"></tbody> </table> <!-- Modal para la edición --> <div class="modal fade" id="modalEditar" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Editar Registro</h5> <button type="button" class="close" data-dismiss="modal">×</button> </div> <div class="modal-body"> <form id="formularioEditar"> <input type="hidden" name="id" id="editId"> <div class="form-group"> <label for="editRegistro">Registro:</label> <input type="text" class="form-control" id="editRegistro" name="editRegistro"> </div> <div class="form-group"> <label for="editPDF">PDF:</label> <input type="text" class="form-control" id="editPDF" name="editPDF"> </div> <button type="submit" class="btn btn-primary">Guardar Cambios</button> </form> </div> </div> </div> </div> </div> <script> let datos = []; obtenerDatos(); function obtenerDatos() { const valorCarpeta = document.getElementById("inputCarpeta").value; fetch(`http://localhost/3-MVC-SITE-v5-SOLICITUDES/EJERCICIOS-COMPONENTES/componentes/0-solicitud_tabla.php?carpeta=${valorCarpeta}`) .then(res => res.json()) .then(data => { console.log(data.status); datos = data.result; pintarTabla(datos); }); } function pintarTabla(datos) { const tablaBody = document.getElementById('tablaBody'); let tablaHTML = ''; for (let dato of datos) { tablaHTML += ` <tr> <td>${dato.id}</td> <td>${dato.carpeta}</td> <td>${dato.registro || ''}</td> <td>${dato.solicitud || ''}</td> <td>${dato.f_registro || ''}</td> <td>${dato.comentario || ''}</td> <td>${dato.f_vence || ''}</td> <td> <button class="btn btn-primary" onclick="abrirModalEditar(${dato.id})">Editar</button> </td> <td>${dato.resolvio || ''}</td> <td>${dato.f_contesto || ''}</td> </tr> `; } tablaBody.innerHTML = tablaHTML; } function abrirModalEditar(id) { obtenerDatos().then(() => { const dato = datos.find(item => item.id === id); console.log(dato); const modalElement = document.getElementById("modalEditar"); const modal = new bootstrap.Modal(modalElement); modal.show(); document.getElementById("editId").value = dato.id; document.getElementById("editRegistro").value = dato.registro; document.getElementById("editPDF").value = dato.pdf; }); } </script> </body>
abrirModalEditar dentro de una promesa, que se resuelve después de que los datos se hayan cargado correctamente. Esto garantiza que los datos estén disponibles antes de intentar acceder a ellos.
Comentarios
Publicar un comentario