2013-06-28 45 views
0

以下是我打開indexedDB的Javascript代碼。我已經在Firefox 21中成功地測試了幾次代碼,但現在我看到e.target.error.name中的indexedDB.open()函數返回AbortError。Indexeddb AbortError

var openDB = function(dbCallBack) { 
    var openDB = function(dbCallBack) { 
    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; 

    request = window.indexedDB.open('mgDB'); 
    request.onerror = function(e) { 
     alert('Error: ' + e.target.error.name + ': Failed to open the database'); 
     dbCallBack(false, false); 
    }; 

    request.onupgradeneeded = function(e) { 
     dbCallBack(true, false); 
    }; 

    request.onsuccess = function(e) { 
     db = e.target.result; 
     if (db.objectStoreNames.length == 0) { 
     dbCallBack(true, true); 
     } else { 
     dbCallBack(true, false); 
     } 
    }; 
    }; 
}; 

下面介紹如何調用openDB()函數。對於dbCallBack函數的代碼是內嵌在下面:

if (!db) { 
    var dbOpenSuccess; 
    openDB(function(dbOpenSuccess, emptyTableMsg) { 
     if (emptyTableMsg) { 
     displayEmptyTableMsg(); 
     } else if (dbOpenSuccess) { 
     displayTableContents();   
     } 
    }); 
} 

注:我曾嘗試清除瀏覽器緩存和從文件夾C手動刪除索引資料:\用戶{用戶ID} \應用程序數據\漫遊\ Mozilla的\火狐\ Profiles文件然後重新運行測試。我在http://nparashuram.com/IndexedDB上成功運行了相同的代碼。什麼可能是錯的?

+0

你可以在doCallBack函數中顯示你正在做什麼嗎? –

+0

我已經編輯了上面的問題來回答你的問題。 –

+0

同樣,請注意,dbCallBack函數之前已成功運行。 –

回答

0

如果您在監聽事件,您的代碼將會正常,如下所示。

request.onsuccess = function(e) { 
    db = e.target.result; 
    db.onabort = function(e) { 
    db.close(); 
    db = null; 
    } 
    if (db.objectStoreNames.length == 0) { 
    dbCallBack(true, true); 
    } else { 
    dbCallBack(true, false); 
    } 
}; 
+0

這沒有奏效。問題是request.onsuccess事件根本沒有被觸發。我在request.onerror事件的代碼中插入了db.close(),但由於e.target.result不包含數據庫,因此無法工作。 –

+1

然後,很可能AbortError來自某個請求的onerror處理程序的未處理事件。這些錯誤可能來自ongradegradeneeded回調。確保你沒有任何錯誤。 –

+0

你對onupgradeneeded事件的回調是正確的。當onUpgrade需要調用回調函數時,我沒有初始化db變量,導致onerror事件被觸發。在從onupgrade需要註釋掉dbcallback後,我能夠使代碼工作。謝謝你的幫助。 –