2012-02-01 348 views
0

我想使用IndexedDB獲取本地存儲的一些數據。下面,我有我與我試圖讓一個簡單的例子onupgradeneeded事件觸發爲什麼在連接到indexedDB時我的onupgradeneeded回調從未被調用?

<html> 
    <head> 
    <script> 

     var indexedDB = window.indexedDB || window.webkitIndexedDB 
        ||window.mozIndexedDB||window.msIndexedDB; 

     var request = indexedDB.open("mydb",2),  

     customerData=[ 
     {ssn:"444-44-4444",name:"Bill",age:35,email:"[email protected]"},  
     {ssn:"555-55-5555",name:"Donna",age:32,email:"[email protected]"} 
     ]; 

     request.onerror = function(event){ 
     alert("ERROR") ; 
     }; 
     request.onupgradeneeded = function(event) { 
     alert("UPGRADE NEEDED") ; 
     var objectStore = db.createObjectStore("customers",{keyPath:"ssn"}); 
     objectStore.createIndex("name","name",{unique:false}); 
     objectStore.createIndex("email","email",{unique:true}); 

     for(var i in customerData){ 
      objectStore.add(customerData[i]); 
     } 
     } ; 
     request.onsuccess = function(e) { 
     alert("SUCCESS") ; 
     } ; 
    </script> 
    </head> 
</html> 

我試圖改變的版本號,但無論我嘗試onupgradeneeded不調用/解僱。任何建議爲什麼?

歡呼 盧卡

回答

5

我在FF 10中測試了它,它對我很有用。 (直到代碼嘗試使用未定義的「db」變量「)。

您使用的瀏覽器是什麼?升級需要的事件僅在FF 10中引發。Chrome 16仍然使用舊草稿,您必須檢查db .version屬性並調用db.setVersion如果這不是你想要的。

如果使用FF10,你確定「mydb的」尚未創建?

此外,要確保你通過一個真正的web服務器來測試它,FF不會讓你在本地HTML文件中使用indexedDB,如果發生這種情況,你應該看到一個錯誤:「操作失敗,原因與數據庫本身無關,並且沒有被其他錯誤代碼覆蓋「在你的控制檯中。

+0

檢查,我從6.x升級到10和它現在工作正常! 我測試過這個東西之前在鉻17,這是行不通的(也Safari /歌劇不工作) 謝謝! – 2012-02-14 20:06:16

1

你沒有定義數據庫變量

我有同樣的問題......這是來自MDN的代碼,並且他們沒有解釋如何更新數據庫版本沒有setVersion()函數

+1

我認爲他們解釋說,與「indexedDB.open(」mydb「,2)」你可以定義你的數據庫版本。如果該版本與數據庫版本不匹配,則調用「onupgradeneeded」。這是我的文檔紅色,聽起來很邏輯,但它不工作:) – 2012-02-01 19:36:57

+0

我假設你通過獲取數據庫:var db = event.target.result;但是,因爲onupgradeneeded從來沒有被稱爲你不會得到一個錯誤 – 2012-02-02 16:38:19

+1

如果你將設法解決這個問題,這將是非常有用的,如果你將它張貼在這裏... – jsbuster 2012-02-02 21:56:02

相關問題