2013-07-15 45 views
0

創建交易時,我嘗試使用索引DB API進行一些測試。NotFoundError:DOM IDBDatabase異常8 IndexedDB的

我的代碼如下:

<html> 
<head> 
    <script type="text/javascript"> 

     var db = null; 
     const dbName = "contactsDB"; 
     const dbVersion = 1; 
     const storeName = "contacts"; 

     const contacts = [ 
      {id : 1, firstname : 'F1', lastname : 'L1'}, 
      {id : 2, firstname : 'F2', lastname : 'L2'} 
     ]; 

     function init() { 
      window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; 
      openDB(); 
     } 

     function openDB() { 
      var request = window.indexedDB.open(dbName, dbVersion); 

      request.onerror = function (e) { 
       alert('DB connexion error : ' + e.target.errorCode); 
      }; 

      request.onsuccess = function (e) { 
       alert('DB connexion success'); 
       // get db instance 
       db = e.target.result; 
      }; 

      // seulement implemente sur les browsers recents 
      request.onupgradeneeded = function (e) { 
       // updgrade DB 
       var db = e.target.result; 

       if (db.version != dbVersion) {    
        // create object store 
        var objectStore = db.createObjectStore(storeName, {keyPath : "id"}); 

        // create index to search contacts by lastname. 
        // Duplicates possible ==> so no unique index 
        objectStore.createIndex("lastname", "lastname", {unique : false}); 
       } 
      }; 
     } 

     function addToDB() { 
      // get object store in tx 
      var objectStore = getObjectStore(storeName, "readwrite"); 

      // stores values 
      for (var c in contacts) { 
       var request = objectStore.add(contacts[c]); 
       request.onsuccess = function (e) { 
        alert('Add success for ' + e.target.result); 
       } 
      } 

     } 

     function getObjectStore(store_name, mode) { 
      var tx = db.transaction(store_name, mode); 
      return tx.objectStore(store_name); 
     } 

    </script> 
</head> 
<body onload="init();"> 
    <input type="button" onclick="addToDB();" value="Add" /> 
</body> 
</html> 

我有一個Web服務器使用本地主機與域名的網頁。

當我用Firefox 22.0加載頁面,數據庫開放取得成功。然而,當我點擊添加按鈕等addToDB函數被調用我已經在Firefox控制檯以下錯誤:

NotFoundError: The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.
var tx = db.transaction(store_name, mode);

我也做了同樣的測試在Chrome 24時,我點擊添加按鈕錯誤來自同一行var tx = db.transaction(store_name,mode);和Chrome控制檯上,我有以下錯誤:

Uncaught Error: NotFoundError: DOM IDBDatabase Exception 8

通過檢索有關異常的詳細信息,我發現下面的鏈接:

https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabaseException?redirectlocale=en-US&redirectslug=IndexedDB%2FIDBDatabaseException

在該鏈接,它標誌着例外8: 請求被中止,例如,通過調用IDBTransaction.abort。

所以,我的問題,我不知道爲什麼我的要求是在該點中止。

有人有一個想法,以幫助解決這個問題?

謝謝。

西爾

回答

1

你的對象存儲沒有被因爲if (db.version != dbVersion)檢查的創建。該塊將永遠不會被輸入。只需取消支票,改爲const dbVersion = 2;,一切都會好的。

相關問題