2012-03-16 37 views
1

我想設置chrome中使用的indexeddb存儲。但是當我嘗試設置READ_WRITE事務時,我得到了Uncaught TypeError未捕獲TypeError:在使用索引數據庫時在Chrome中輸入錯誤

我一直無法找到使用webkitIDB的最新信息。所以我基本上在這裏盲注。任何想法我做錯了什麼?我錯過了這件事情嗎?

設置:

function OfflineStorage() { 
    this.saveJSONString = __bind(this.saveJSONString, this); 
    var request, 
    _this = this; 
    this.dbkeyRange = window.webkitIDBKeyRange; 
    this.dbTransaction = window.webkitIDBTransaction; 
    this.db = window.webkitIndexedDB; 
    request = this.db.open("lucidFrog"); 
    request.onsuccess = function(e) { 
    _this.db = e.target.result; 
    return _this.setupDB(); //setupDB() ensures the objectStores have been created. 
    }; 
}  

保存功能:

OfflineStorage.prototype.saveJSONString = function(objectStore, json_string, obj_id) { 
    var request, store, transaction; 

    //PROBLEM AREA, gives "Uncaught TypeError: Type error" 
    transaction = this.db.transaction([objectStore], this.dbTransaction.READ_WRITE, 0); 
    //////////////////// 

    store = transaction.objectStore(objectStore); 
    request = store.put({ 
    "json": json_string, 
    "id": obj_id 
    }); 
    request.onsuccess = function(e) { 
    return console.log("YYYYYYEEEEEAAAAAHHHHHH!!!"); 
    }; 
}; 

請求objectStore已經建立,並證實this.dbTransaction定義。

+0

我喜歡把自己當成IndexedDB的「專家」,我很樂意提供幫助。首先,是objectStore var是否傳遞一個字符串或對實際對象存儲的引用,例如在objectStore創建時返回的對象存儲? – buley 2012-03-16 22:02:27

+0

'objectStore'作爲一個字符串被傳遞。 – 2012-03-17 01:00:44

回答

5

這不是從對象存儲區拋出的IndexedDB錯誤,而是設置中的某些內容。當您將錯誤的對象類型傳遞給調用時會引發這種錯誤,這就是爲什麼我的第一個猜測是var實際上並不是一個字符串。

基於消除this.db不是未定義的(否則它會在事務上出錯),事務是一個函數(否則它會拋出非函數調用)。所以我必須猜測this.dbTransaction.READ_WRITE應該返回1就好了(仔細檢查一下)。

因此,我強烈懷疑這是導致問題的第三個參數。我相當肯定我從未使用spec中顯示的第三個參數(可選timeout),並且認爲這裏沒有必要,因爲默認超時值已經是0(不確定)。你可以嘗試將該行更改爲以下內容並查看它是否有效?

transaction = this.db.transaction([objectStore], this.dbTransaction.READ_WRITE);

更新:請注意,版本常量現在已被棄用。而不是這些數字值,您現在需要傳遞一個字符串:「readwrite」,「readonly」或「versionchange」。

+1

刪除第三個參數解決了它。 – 2012-03-21 13:29:48

相關問題