0

同じスクリプト内でさまざまな IndexedDB objectStores を作成する最良の方法は何ですか? 2 つの objectstore を作成しました。

var opinionObjectStore = thisDb.createObjectStore("opinion", {keyPath: "id", autoIncrement: false});
var commentObjectStore = thisDb.createObjectStore("comment", {keyPath: "id", autoIncrement: false});

次に、トランザクションを開き、両方のオブジェクトストアを取得します。

var transo = myDataBase.transaction(["opinion", "comment"], "readwrite");
var opinionsObjectStore = transo.objectStore("opinion");
var commentsObjectStore = transo.objectStore("comment");

次に、「保存する必要がある」オブジェクトを作成します。

var comment = {id: "myid"};
var resp = commentsObjectStore.add(comment);
// other instructions [...]
var opinion = {};
opinion.id = tagElement.id;
var resp = opinionsObjectStore.add(opinion);

そして、私は例外を受け取ります:

DataError: Data provided to an operation does not meet requirements.
[Break On This Error]
var resp = commentsObjectStore.add(comment);

コメントを追加して、例外をスローしないようにしてください。

indexedDBにデータを追加するときに DOM IDBDatabase Exception 5 を読みました

4

3 に答える 3

0

問題が見つかりました:

tagElement.id;

tagElement が からの xml ノードの場合:

liveXml.find('Comment').each(function(){
    var tagElement = $(this);

その後tagElement.idは未定義ですが、tagElement.attr('id')定義されています。jQuery大事!

于 2012-11-19T11:50:37.093 に答える
0

DataErrorキーエラーです。したがって、キーを提供していないか、キーが無効である必要があります。

ただし、コードから、有効なキーを提供しています。キーが既に存在している可能性があります。その場合、ブラウザは をスローする必要がありConstraintErrorます。どのブラウザですか?

また、ブラウザのアプリ データ (IndexedDB データ) を消去してから、もう一度お試しください。

于 2012-11-17T03:02:39.940 に答える
0

私のindexedDBViewerを試してみてください.indexeddb構造+データを確認できます. たぶん、これで何が間違っているかを理解できます。コメントのオブジェクトストアの定義によるものだと思います。最初に他のオプションを使用してオブジェクト ストアを作成し、現在提供しているバージョンで再作成されなかった可能性があります。

ここで私の indexeddbviewer を見つけることができ、ここでそれを使用する方法に関するブログ投稿を見つけることができます。Visual Studio 開発者の場合は、ナゲットで「indexedDBViewer」パッケージを検索することもできます。

于 2012-11-17T08:26:59.180 に答える