我正在使用最新的谷歌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");
};
};
}
});
答案 0 :(得分: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");
};
}
答案 1 :(得分:0)
您可以在我的site找到有效的indexeddb示例。我正在使用我为indexeddb API编写的库linq2indexeddb。尝试一下,它将为您节省大量精力,使您的代码与crossborwser兼容。