2015-06-02 85 views
0

嗨我創建了一個Indexeddb數據庫,但是在輸入數據時遇到了麻煩。 數據庫:不能把數據放到使用Firefox的indexeddb數據庫中

var request = indexedDB.open("BCDB"); 

request.onupgradeneeded = function() { 
    var db = request.result; 
    var store = db.createObjectStore("psf", { autoIncrement: true }); 
    var psTag = store.createIndex("ps_tag", "psTag"); 
    var psNameIndex = store.createIndex("ps_name", "psName"); 
    var psResultIndex = store.createIndex("ps_result", "psResult"); 
    var psDateIndex = store.createIndex("ps_date", "psDate"); 
}; 

request.onsuccess = function() { 
    db = request.result; 
}; 

我可以看到數據庫在Firefox的「存儲」窗口創建,但是當我試圖輸入的東西到它,它只是沒有工作。

var tx = db.transaction("psf", "readwrite"); 
var store = tx.objectStore("psf"); 

var request = store.put({ 
    psName: "ABC", 
    psTag: "XYZ", 
    psDate: "DEF", 
    psResult: "QWE" 
}); 

request.onsuccess = function(e) { 
    alert('done'); 
}; 

request.onerror = function(e) { 
    alert(e.value); 
}; 

這個問題只發生在Firefox上。我可以在Chrome上成功輸入。我孤立並找出它是put()失敗,但在Chrome上可以。

回答

2

您的代碼表明你只是想插入數據庫中的一些數據,那麼爲什麼要使用put(),而是使用add()這是指爲宗旨。
put()正在更新數據庫中的某些內容,而add()是要插入的。
檢查 - IDBObjectStore API

var request = store.add({ 
    psName: "ABC", 
    psTag: "XYZ", 
    psDate: "DEF", 
    psResult: "QWE" 
}); 

UPDATE:隨着POC樣品
檢查下面的代碼,它會工作,你是否使用put()add()。試一試,它應該工作。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Stackoverflow</title> 
    <script> 
     var DB_handler = null 
     var request = indexedDB.open("BCDB"); 

     request.onupgradeneeded = function(event) { 
      var db = request.result; 
      var store = db.createObjectStore("psf", { autoIncrement: true }); 
      var psTag = store.createIndex("ps_tag", "psTag"); 
      var psNameIndex = store.createIndex("ps_name", "psName"); 
      var psResultIndex = store.createIndex("ps_result", "psResult"); 
      var psDateIndex = store.createIndex("ps_date", "psDate"); 
     }; 

     request.onsuccess = function(event) { 
      DB_handler = event.target.result; 
      var tx = DB_handler.transaction("psf", "readwrite"); 
      var store = tx.objectStore("psf"); 

      var request = store.add({ 
       psName: "ABC", 
       psTag: "XYZ", 
       psDate: "DEF", 
       psResult: "QWE" 
      }); 

      request.onsuccess = function(e) { 
       alert('done'); 
       var transaction = DB_handler.transaction(["psf"]); 
       var objectStoreHandler = transaction.objectStore("psf"); 
       var cursorHandler = objectStoreHandler.openCursor(); 

       cursorHandler.onerror = function(event) { 
        if (errorCallBack && typeof(errorCallBack) == 'function') { 
         errorCallBack(event); 
        } 
       }; 

       cursorHandler.onsuccess = function(event) { 
        var cursor = event.target.result; 
        if (cursor) { 
         if(cursor.value != null && cursor.value != undefined){ 
          console.log(cursor.value); 
         } 
        } 
       }; 

      }; 

      request.onerror = function(e) { 
       alert(e.value); 
      }; 
     }; 
    </script> 
</head> 
<body> 
</body> 
</html> 

enter image description here

我的Firefox版本是38.0.1。你能否檢查一下你的Firefox版本,如果它已經太舊了沒有IndexedDB,因爲add()put()是基本功能,所以它們應該正確實施。

+0

那麼因爲自從我學習了IDB(這是昨天),每個人似乎都使用_put()_而不是_add()_。 關於該功能,它也不起作用。我使用了Google Chrome上完全相同的功能,但沒有任何效果。 – jcp0908

+0

好吧,不是問題,我們都在這裏學習。現在記住你應該使用'add()'來插入,'put()'來更新。檢查我的編輯,我給你一個樣本POC。 – hagrawal

+0

感謝您的幫助。我也使用了最新版本。但它也不起作用。你的代碼在谷歌瀏覽器上完美工作 http://i.imgur.com/0X3C6Ij.jpg – jcp0908