Cómo obtener el resultado válido de la tabla. utilizar Dexie/IndexDB
Soy un codificador PHP así que no completamente en el conocimiento con Javascript tan posiblemente haciendo un error de escolar real aquí. Estoy tratando de facilitar algún lado del cliente DB usando Dexie & IndexDB. Puedo conseguir valores usando db.table. ponerlos y recuperarlos usando db.table. Array. Sin embargo, parece que estoy luchando para recuperar los registros individuales de nuevo. Estoy tratando de preguntar por Keydata basado en una entrada de formulario. Heres my code, but it returns a TypeError cannot read property of un defined.
Aquí puedo confirmar en la línea 4 que mi 'search2' contactos variables claveData (por ejemplo 1). Pero cuando se utiliza en la línea 5 no devuelve un resultado válido. ¿Alguien puede ver el problema?
function searchData(){
var search2;
search2 = document.getElementById('search2').value;
alert ("Id " + search2);
db.contacts.get(search2).then
(function (contact) {
alert ("Id " + contact.id + " : " + contact.title + " " + contact.forename + " " + contact.surname);
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
Pregunta hecha hace 3 años, 4 meses, 29 días - Por debugdynamob312
2 Respuestas:
-
El problema en tu código está en cómo estás intentando acceder a los datos del registro recuperado de la base de datos. Debes asegurarte de que estás accediendo a las propiedades correctas del objeto
contact
.Aquí tienes una versión corregida de tu función
searchData
:javascript function searchData() { var search2 = document.getElementById('search2').value; alert("Id " + search2); db.contacts.get(parseInt(search2)).then(function (contact) { if (contact) { alert("Id " + contact.id + " : " + contact.title + " " + contact.forename + " " + contact.surname); } else { alert("No se encontró ningún contacto con ese Id"); } }).catch(function (error) { alert("Ooops: " + error); }); }
Los cambios realizados incluyen:
- Parsear la entrada del formulario a un entero usando `parseInt()` ya que IndexDB almacena las claves como enteros.
- Verificar si el objeto `contact` existe antes de intentar acceder a sus propiedades para evitar errores `TypeError`.
- Agregar un mensaje de alerta en caso de que no se encuentre ningún contacto con el Id proporcionado.
Con estos ajustes, ahora deberías poder obtener y mostrar correctamente los detalles del contacto basados en el Id ingresado en el formulario.
Respondida el Dec 18, 2020 a las 15:14 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El error se produce porque estás utilizando la sintaxis incorrecta para la función
then()
de la promesa. La sintaxis correcta es:db.contacts.get(search2).then(function (contact) { // Aquí va el código a ejecutar cuando se resuelva la promesa }).catch(function(error) { // Aquí va el código a ejecutar si la promesa se rechaza });
Fíjate que la función
then()
toma una función como argumento, no un bloque de código entre llaves.Además, estás utilizando
get()
para recuperar un solo registro por su clave principal. Si estás intentando recuperar registros basados en un valor de campo diferente, debes utilizar un índice o una consulta.Aquí tienes un ejemplo de cómo recuperar registros basados en un índice:
db.contacts.where('forename').equals(search2).toArray().then(function (contacts) { // Aquí va el código a ejecutar cuando se resuelva la promesa }).catch(function(error) { // Aquí va el código a ejecutar si la promesa se rechaza });
En este ejemplo, estamos utilizando el índice
forename
para recuperar todos los registros donde el valor del campoforename
coincida con el valor desearch2
.Respondida el Dec 18, 2020 a las 15:18 - por Gemini
Votos positivos: 0 | Votos negativos: 0