1

私は最新の Google Chrome を使用しています。HTML5 indexedDB の例を実装しようとしています。AIMは、ページがロードされたときにデータベースを作成し、データをそこに保存します。サンプルの実例がある場合は、投稿してください。このコードを試しましたがUncaught Error: InvalidStateError: DOM IDBDatabase Exception 11、トランザクションを作成しようとしているときに取得しています。ここにコードスニペットがあります..

var idbRequest;
    var idb;
$(document).ready(function(){
    //ini----------------------
     var peopleData = [
                       { name: "John Dow", email: "john@company.com" },
                       { name: "Don Dow", email: "don@company.com" }
                   ];
    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;
    window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
    window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
    //create database.............
    if (window.indexedDB) {
          idbRequest = window.indexedDB.open("StoreDB");
          idbRequest.onsuccess =  function(e) {
              idb = idbRequest.result || e.result;  // FF4 requires e.result. IDBRequest.request isn't set :(
          /*idbRequest.onerror = function (evt) {
                  console.log("IndexedDB error: " + evt.target.errorCode);
              };*/
              var v = '2.0';
                var setVrequest = idb.setVersion(v);
                setVrequest.onsuccess = function(e) {
                    if(idb.objectStoreNames.contains("Stores")) {
                        alert("ObjectStore is already created.");
                        return false;
                      }
                    var objectstore = idb.createObjectStore("Stores");
                    alert("Object store Created.");
                    if (!idb.objectStoreNames.contains('Stores')) {
                          alert("Object store doesn't exist.");
                        return;
                      }else{
                          alert("Object store contain 'store'");
                      }

                       // Create a transaction that locks the world.
                     var trans = idb.transaction(["Stores"],"readwrite");//getting exception on this line..
                     trans.oncomplete = function(){
                          console.log("Success transaction");
                        };
                        var objectStore = trans.objectStore("Stores");
                      var request = objectStore.put(
                          1,
                          "wsdsdsd");
                    alert("data added");
                };






            };


    }   
});
4

2 に答える 2

3

解決済み..バージョン変更の進行中にトランザクションを作成できないため、エラーが発生しました..これが最終的な有効な回答です..

var idbRequest;
    var idb;
$(document).ready(function(){
    //ini----------------------

    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;
    window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
    window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
    //create database.............
    if (window.indexedDB) {
          idbRequest = window.indexedDB.open("DB");
          idbRequest.onsuccess =  function(e) {
              idb = idbRequest.result || e.result;  // FF4 requires e.result. IDBRequest.request isn't set :(
          /*idbRequest.onerror = function (evt) {
                  console.log("IndexedDB error: " + evt.target.errorCode);
              };*/
              var v = '2.0';
                var setVrequest = idb.setVersion(v);
                setVrequest.onsuccess = function(e) {
                    if(idb.objectStoreNames.contains("Stores")) {
                        alert("ObjectStore is already created.");
                        var vertrans = setVrequest.result;
                        vertrans.oncomplete = doStuff;
                        return false;
                      }
                    var objectstore = idb.createObjectStore("Stores");
                    alert("Object store Created.");
                    if (!idb.objectStoreNames.contains('Stores')) {
                          alert("Object stores doesn't exist.");
                        return;
                      }else{
                          alert("Object store contain 'stores'");
                      } 
                    var vertrans = setVrequest.result;
                    vertrans.oncomplete = doStuff;
                };

            };


    }   
});

function doStuff(){
       // Create a transaction that locks the world.
    var trans = '';

         trans = idb.transaction(['Stores'],'readwrite');

     var objectStore = trans.objectStore('Stores');
      var request = objectStore.put(
          1,
          "wsdsdsd");
    alert("data added");
     trans.oncomplete = function(){
          console.log("Success transaction");
        };
}
于 2012-08-20T12:01:45.340 に答える
0

私のサイトで実際の indexeddb サンプルを見つけることができます。linq2indexeddbという indexeddb API 用に作成したライブラリを使用しています。試してみると、コードをクロスボウサーに対応させるための多くの労力を節約できます。

于 2012-08-20T12:05:26.047 に答える