2013-06-20 251 views
0

我正在使用Firefox 21.我編寫了下面的代碼,以在頁面加載時顯示indexedDB對象存儲的內容。IndexedDB事件不會觸發

 window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || 
         window.msIndexedDB;  
     window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || 
         window.msIDBTransaction; 
     window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || 
         window.msIDBKeyRange; 

     var request = window.indexedDB.open('mgDB', 1); 
     request.onerror = function(e) { 
      alert('error'); 
     }; 

     request.onupgradeneeded = function(e) { 
      alert('upgradeneeded'); 
     }; 

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

由於知道mgDB尚不存在,我預計將觸發upgradeneeded事件。當我使用Firebug調試代碼時,發現錯誤,onsuccess和onupgrade需要空值,所以沒有任何事件被觸發。當我在沒有調試模式的情況下執行代碼時,我看到成功事件被解僱。有誰知道爲什麼會發生?

回答

2

onupgradeneeded不會觸發這個事實是因爲您已經多次運行該代碼並且第一次創建了版本爲1的數據庫。 open函數的邏輯是,如果數據庫不存在則創建數據庫,如果數據庫的版本低於提供的版本,則升級。 (請記住,indexeddb是持久性存儲,這意味着如果關閉瀏覽器它不會被破壞)如果您想確保每次都要輸入onupgrade需要(用於測試pupouses !!!),則可以先刪除數據庫再次打開/創建它。

事件爲空的事實可能取決於您放置斷點的位置?在其中一個回調中放置一個斷點,您將看到onsuccess,onerror ......將被填充到請求對象上。

+0

對於需要刪除數據庫並在需要測試時重新啓動的需求是正確的。讓我詳細說明我如何進行測試。昨天,當我開始測試的時候,我發現有幾次這個事件發生了。然後,在每次測試之前,我手動刪除了數據庫,並且看到onsuccess事件持續發生。今天早上,我再次通過手動刪除數據庫並清除Firefox緩存+ cookie進行了測試,並且我看到onupgradeneeded和success事件都是一致的。 –

+0

就是這樣,如果升級,onupgradeneeded會先被觸發。在這裏你可以編輯結構。完成此操作後,打開數據庫連接,您可以開始使用它讀取,插入,刪除...數據。 –