Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

210
Vistas
¿Cómo insertar datos en IndexedDB dentro de una respuesta AJAX?

digamos que tengo el siguiente código que crea la base de datos FUERA de mi llamada Ajax:

 // This works on all devices/browsers, and uses IndexedDBShim as a final fallback var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB; // Open (or create) the database var open = indexedDB.open("MyDatabase", 1); // Create the schema open.onupgradeneeded = function() { var db = open.result; var store = db.createObjectStore("MyObjectStore", {keyPath: "id"}); var index = store.createIndex("NameIndex", ["name.last", "name.first"]); };

y luego quiero almacenar algunos datos en esta base de datos dentro de mi llamada Ajax así:

 $.ajax({ url: "https://sometise.com, headers: { "Authorization": "TOKEN" }, type: "GET", success: function (data) { $(data).each(function (index, el) { var myArray = { ID: el.id, Content: data } ///ADDING THE ABOVE ARRAY TO THE DATABASE LIKE SO HERE open.onsuccess = function() { // Start a new transaction var db = open.result; var tx = db.transaction("MyObjectStore", "readwrite"); var store = tx.objectStore("MyObjectStore"); var index = store.index("NameIndex"); // Add some data store.put({id: el.id, name: {first: myArray, last: "Doe"}}); // Close the db when the transaction is done tx.oncomplete = function() { db.close(); }; } }); } });

¡pero el código anterior no hace nada!

Cualquier indicador sería apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El evento open.onsuccess se activa solo una vez. Esto debería suceder tan pronto como la base de datos esté lista, lo que probablemente suceda antes de que la llamada ajax reciba una respuesta del servidor. Entonces, el evento se activa antes de que adjunte el oyente, lo que significa que nunca se maneja.

onsuccess almacenar el resultado de éxito fuera de la devolución de llamada ajax. O puede usar una versión prometida de IDB como https://github.com/jakearchibald/idb y await dentro de la devolución de llamada de ajax.

Editar: un ejemplo que usa promesas, espera y la biblioteca idb que mencioné anteriormente:

 const db = openDB(…); async function doPost() { const response = fetch('https://somesite.com') const tx = (await db).transaction("MyObjectStore", "readwrite"); const store = tx.objectStore("MyObjectStore"); const index = store.index("NameIndex"); // Add some data await store.put(await response); await tx.done; }

Debería funcionar así, pero recomendaría leer sobre promesas en general. También considere el uso de funciones de lenguaje moderno como const/let y fetch, que generalmente hacen que la vida sea mucho más fácil.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda