2012-03-16 1 views
1

chromeで使用するためにindexeddbストレージを設定しようとしています。しかし、READ_WRITEトランザクションを設定しようとするとUncaught TypeErrorが表示されます。Uncaught TypeError:indexedDBを使用しているときに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がありますか? – buley

+0

'objectStore'が文字列として渡されています。 –

答えて

5

これはオブジェクトストアからスローされたIndexedDBエラーではなく、セットアップ中のものです。この種のエラーは、呼び出しに間違ったオブジェクト型を渡すとスローされます。その理由は、最初にobjectStore varが実際には文字列ではないと思われた理由です。

削除に基づいてthis.dbは定義されていません(それ以外の場合はトランザクションでエラーになります)。トランザクションは関数です(そうでない場合は、非関数呼び出しがスローされます)。だから私はthis.dbTransaction.READ_WRITEがちょうど良い(これをダブルチェックする)1を返す必要があります推測する必要があります。

したがって、私はこれが問題の原因となる3番目のパラメータだと強く思っています。私はかなり明日ですが、仕様(第timeout)に示されている3番目のパラメータを使用したことは一度もありません。デフォルトのタイムアウトはすでに0(不確定)なのでここでは不要です。その行を次のように変更して、それが機能するかどうか確認できますか?

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

更新:バージョン定数は廃止予定です。これらの数値の代わりに、 "readwrite"、 "readonly"、または "versionchange"という文字列を渡す必要があります。

+1

3番目のパラメータを削除すると解決しました。 –

関連する問題