0

IndexedDB を使用してローカルに保存されたデータを取得しようとしています。以下に、onupgradeneeded イベントを発生させようとする簡単な例を示します。

<html>
  <head>
    <script>

      var indexedDB = window.indexedDB || window.webkitIndexedDB 
                    ||window.mozIndexedDB||window.msIndexedDB;

      var request = indexedDB.open("mydb",2),    

      customerData=[
        {ssn:"444-44-4444",name:"Bill",age:35,email:"bill@company.com"},      
        {ssn:"555-55-5555",name:"Donna",age:32,email:"donna@home.org"}
      ];

      request.onerror = function(event){
         alert("ERROR") ;
      };
      request.onupgradeneeded = function(event) {
         alert("UPGRADE NEEDED") ;
         var objectStore = db.createObjectStore("customers",{keyPath:"ssn"});
         objectStore.createIndex("name","name",{unique:false});
         objectStore.createIndex("email","email",{unique:true});

         for(var i in customerData){
            objectStore.add(customerData[i]);
         }
      } ;
      request.onsuccess = function(e) {
         alert("SUCCESS") ;
      } ;
    </script>
  </head>
</html>

バージョン番号を変更しようとしましたが、upgradeneeded を試しても呼び出されません。なぜ何か提案はありますか?

乾杯ルカ

4

2 に答える 2

5

これをFF 10でテストしたところ、うまくいきました。(コードが未定義の「db」変数を使用しようとするまで。)

どのブラウザを使用していますか? upgradeneeded イベントは FF 10 でのみ発生します。Chrome 16 ではまだ古いドラフトが使用されており、db.version プロパティを確認し、必要でない場合は db.setVersion を呼び出す必要があります。

FF10 を使用している場合、「mydb」がまだ作成されていませんか?

また、実際の Web サーバーを介してこれをテストしていることを確認してください。FF では、ローカルの HTML ファイルで indexedDB を使用できません。その場合、コンソールに「データベース自体に関係のない理由で操作が失敗し、他のエラー コードではカバーされません」のようなエラーが表示されるはずです。

于 2012-02-07T17:41:54.767 に答える
1

db 変数を定義していません

私は同じ問題を抱えています...これはMDNのコードであり、setVersion()関数なしでDBバージョンを更新する方法を説明していません

于 2012-02-01T16:52:53.563 に答える