2013-07-02 5 views
-1

Я читаю профессиональный JavaScript для веб-разработчиков 3-е издание и примеры. В главе 23 есть демо: IndexedDBExample02.htm. он имеет ошибку: DOM IDBDatabase Exception 8, пожалуйста, помогите, большое спасибо!DOM IDBDatabase Exception 8 в indexedDB

(function(){ 

    var indexedDB = window.indexedDB || window.msIndexedDB || window.mozIndexedDB || window.webkitIndexedDB, 
     request, 
     store, 
     database, 
     users = [ 
      { 
       username: "007", 
       firstName: "James", 
       lastName: "Bond", 
       password: "foo" 
      }, 
      { 
       username: "ace", 
       firstName: "John", 
       lastName: "Smith", 
       password: "bar" 
      }     
     ]; 

    request = indexedDB.open("example"); 
    request.onerror = function(event){ 
     alert("Something bad happened while trying to open: " + event.target.errorCode); 
    }; 
    request.onsuccess = function(event){ 
     database = event.target.result; 
     initializeDatabase(); 
    };  

    function initializeDatabase(){ 
     if (database.version != "1.0"){ 
      request = database.setVersion("1.0"); 
      request.onerror = function(event){ 
       alert("Something bad happened while trying to set version: " + event.target.errorCode); 
      }; 
      request.onsuccess = function(event){ 
       store = database.createObjectStore("users", { keyPath: "username" }); 
       var i=0, 
        len = users.length; 

       while(i < len){ 
        store.add(users[i++]); 
       } 

       alert("Database initialized for first time. Database name: " + database.name + ", Version: " + database.version); 
      }; 
     } else { 
      alert("Database already initialized. Database name: " + database.name + ", Version: " + database.version); 

      request = database.transaction("users").objectStore("users").get("007"); 
      request.onsuccess = function(event){ 
       alert(event.target.result.firstName); 
      }; 
     } 
    } 

})(); 

ответ

0
  • SetVersion устарело
  • версии Интс, а не строки (а не поплавки)
  • с использованием переменной базы данных в объеме не гарантирует его состояния, вы только должны использовать его в callback
  • вы можете изменить свою схему только в контексте транзакции, используемой при обратном вызове onupgradedededed.
+2

версии являются ints, а не плавает – dgrogan

+0

Вы правы, упс! – Josh

0

Я бы посоветовал вам прочитать некоторые блоги по этому вопросу. То, как вы работаете, устарело, как упомянул Джош Фроелих. Я написал около blogs, я советую вам прочитать их сначала, прежде чем переходить к API-интерфейсу indexeddb.