2013-06-26 3 views
1

Спасибо большое вам совет Krištof, правлю мой код:TypeError «versionchange» при использовании индексированной

var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; 
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction; 

const dbName = "mediasDB"; 

const db_store = "medias"; 

var db; 


function openDB(dbName, dbVersion) { 

    var request = indexedDB.open(dbName, dbVersion); 

    request.onupgradeneeded = function (evt) { 

     console.log("Upgrade"); 
     console.log('Creating objectStore'); 

     var store = evt.currentTarget.result.createObjectStore(db_store); 

     store.transaction.oncomplete = function (evt) { 

      storeMedias(mediaData, function (media) { 
       var store = getObjectStore(db_store, "readwrite") 
       console.log(media); 
       store.put(media, media.url); 
       console.log("Rajout d'un media dans la BD"); 
      }); 
     }; 
    }; 

    request.onsuccess = function (event) { 
     console.log("openDB DONE"); 
     db = this.result;  
    }; 

    request.onerror = function (event) { 
     console.log(event.target.result); 
    }; 
} 


openDB(dbName, 1); 


//On déclenche le défilement des médias au bout de 5 secondes 

setInterval(function() { 
    $.getJSON("remoteFileJson", function (data) { 

     if (data.revision != db.version) { 
      console.log('Mise à jour de la BD'); 
      openDB(dbName, data.revision); 

     } else { 
      console.log('La base de données est à jour'); 
     } 
    }); 
}, 10000); 

Каждые десять секунд, я получаю JSON, которые дают мне мой номер ревизии (это больше, чем мой db.version я проверяю), но когда я reOpenDB, нет вызова для обновленного.

+0

var db ,; Думаю, после db опечатка ?? –

+0

Нет, это была ошибка, извините. var db; –

+0

Текущая проблема теперь, вероятно, в том, что вы заблокированы, потому что ваше первое соединение с db все еще открыто и должно быть закрыто перед обновлением. –

ответ

1

Вы не можете создать транзакцию changechange вручную. Единственный способ вызвать это - изменить номер версии при открытии соединения indexeddb. для получения дополнительной информации: http://www.kristofdegrave.be/2012/01/indexed-db-defining-your-structure-new.html

var dbRequest = indexeddb.open("name", 3); 
dbRequest.onupgradeneeded = function (e) 
{ 
    var versionChangeTrans = e.target.transaction; 
} 
Смежные вопросы