1

indexeddb データベースを正常に作成し、そこにデータをロードできます。同じページからこのデータベースのデータを読み取ることもできます。次に、サイトの別のページからデータベースを読み込もうとします。

db = new ydn.db.Storage('test');
db.keys('items').done(function(d) {
    alert(d);
});

これは動作しません。空の結果が得られます。ただし、上記のコードを Chrome の JavaScript コンソールに直接入力すると、機能します。調べてみると、データベースの準備ができていないようです。だから私はこれを試します。

db = new ydn.db.Storage('test');
db.addEventListener('ready', function() {
    db.keys('items').done(function(d) {
        alert(d);
    });
});

ただし、これにより、コンソールに次のエラーが表示されます。

Uncaught TypeError: undefined is not a function

次のコード行でエラーが表示されます。

db.addEventListener('ready', function() {

ここで何が欠けているのかわかりません。

4

1 に答える 1

1

データベース接続を開くのは非同期操作です。このイベント リスナーは、データベースが接続され、必要なスキーマ変更が行われた後にready呼び出されます。これは、データベース インスタンスによる最初の非同期関数呼び出しです。

データベースのオープンに失敗した場合、errorイベント オブジェクトでコールバックが呼び出されます。複数のリスナーを追加できます。負荷の高いデータベース書き込み操作は、この準備完了イベント ハンドラーの後に呼び出す必要があります。または、イベント リスナー パターンreadyを介してイベントをリッスンすることもできます。DOM

同様の方法で、データベース準備完了イベント リスナーを追加できます。

var db = new ydn.db.Storage('test');
db.onReady(function(e) {
  if (e) {
    if (e.target.error) {
      console.log('Error due to: ' + e.target.error.name + ' ' + e.target.error.message);
    }
    throw e;
  }
  db.put('statement1', large_data);
});
于 2014-12-08T07:53:30.663 に答える