html5 初试 indexedDB(推荐)
indexedDB是存储大量结构化数据的API,demo中用到的是异步API,麻烦的就是所有对indexedDB的操作都会发生一个异步的‘请求’,只要熟悉了API操作起来也很简单。
大体流程是这样
1.打开数据库
JavaScript Code 复制内容到剪贴板 var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; if ( 'webkitIndexedDB' in window) { window.IDBTransaction = window.webkitIDBTransaction; window.IDBKeyRange = window.webkitIDBKeyRange; } //这个就不解释了 var request = indexedDB.open( "adsageIDB" ); //open : indexedDB只有这一个方法 打开(数据库名) request.onsuccess = function (e) { //异步 var v = "1.00" ; var db = e.target.result; if (v!= db.version) { var setVrequest = db.setVersion(v); setVrequest.onsuccess = function (e) { //异步 if (db.objectStoreNames.contains( "todo" )) { db.deleteObjectStore( "todo" ); } var store = db.createObjectStore( "todo" , {keyPath: "adsid" }); //onsuccess 后创建ObjectStore 暂时用到两个参数,数据库&&主键 } } }这样就 创建/连接 了一个数据库
2.创建交互对象 && 监听dom事件 && 处理数据
然后就是要操作数据库了
JavaScript Code 复制内容到剪贴板 //插入数据 暂时只插入一列 var trans = db.transaction([ "todo" ], IDBTransaction.READ_WRITE); //创建transaction var store = trans.objectStore( "todo" ); //创建Store //要操作数据必须建立transaction 和 Store var data = { "text" : todoText, "adsid" : new Date().getTime() }; //一个小数据 adsid是主键 var request = store.put(data); //‘强行’插入 request.onsuccess = function (e) { //成功后执行一些操作 }; request.onerror = function (e) { console.log( "Error Adding: " , e); }; JavaScript Code 复制内容到剪贴板 //读取数据 var trans = db.transaction([ "todo" ], IDBTransaction.READ_WRITE); var store = trans.objectStore( "todo" ); var keyRange = IDBKeyRange.lowerBound(0); var cursorRequest = store.openCursor(keyRange); //这里用到指针cursor ,openCursor的参数 keyRange是遍历范围 还可以添加遍历方向参数 //另一种方法是get() 这个就比较简单了直接store.get('键值')就行 cursorRequest.onsuccess = function (e) { var result = e.target.result; if (!!result == false ) return ; console.log(result.value); result. continue (); //循环读取所有数据 }; JavaScript Code 复制内容到剪贴板 //删除数据 ... store. delete ( '键值' ) ...出了一个小demo
XML/HTML Code 复制内容到剪贴板 <!DOCTYPE html> < html > < head > < script > var indexedDB = window .indexedDB || window.webkitIndexedDB || window.mozIndexedDB; if ('webkitIndexedDB' in window) { window window.IDBTransaction = window.webkitIDBTransaction; window window.IDBKeyRange = window.webkitIDBKeyRange; } adsageIDB = {}; adsageIDB.db = null ; adsageIDB.onerror = function (e) { console.log(e); }; adsageIDB.open = function () { var request = indexedDB .open("adsageIDB"); request.onsuccess = function (e) { var v = "1.00" ; adsageIDB.db = e.target.result; var db = adsageIDB .db; if (v!= db.version) { var setVrequest = db .setVersion(v); setVrequest.onerror = adsageIDB .onerror; setVrequest.onsuccess = function (e) { if(db.objectStoreNames.contains("todo")) { db.deleteObjectStore("todo"); } var store = db .createObjectStore("todo", {keyPath: "adsid"}); adsageIDB.getAllTodoItems(); }; } else { adsageIDB.getAllTodoItems(); } }; request.onerror = adsageIDB .onerror; } adsageIDB.addTodo = function (todoText) { var db = adsageIDB .db; var trans = db .transaction(["todo"], IDBTransaction.READ_WRITE); var store = trans .objectStore("todo"); var data = { "text": todoText, "adsid": new Date().getTime() }; var request = store .put(data); request.onsuccess = function (e) { adsageIDB.getAllTodoItems(); }; request.onerror = function (e) { console.log("Error Adding: ", e); }; }; adsageIDB.deleteTodo = function (id) { var db = adsageIDB .db; var trans = db .transaction(["todo"], IDBTransaction.READ_WRITE); var store = trans .objectStore("todo"); var request = store .delete(id); request.onsuccess = function (e) { adsageIDB.getAllTodoItems(); }; request.onerror = function (e) { console.log("Error Adding: ", e); }; }; adsageIDB.getAllTodoItems = function () { var todos = document .getElementById("todoItems"); todos.innerHTML = "" ; var db = adsageIDB .db; var trans = db .transaction(["todo"], IDBTransaction.READ_WRITE); var store = trans .objectStore("todo"); var keyRange = IDBKeyRange .lowerBound(0); var cursorRequest = store .openCursor(keyRange); cursorRequest.onsuccess = function (e) { var result = e.target.result; if(!! result == false) return; renderTodo(result.value); result.continue(); }; cursorRequest.onerror = adsageIDB .onerror; }; function renderTodo(row) { var todos = document .getElementById("todoItems"); var li = document .createElement("li"); var a = document .createElement("a"); var t = document .createTextNode(row.text); a.addEventListener("click", function() { adsageIDB.deleteTodo(row.adsid); }, false); a.textContent = " [删除]" ; li.appendChild(t); li.appendChild(a); todos.appendChild(li) } function addTodo() { var todo = document .getElementById("todo"); adsageIDB.addTodo(todo.value); todo.value = "" ; } function init() { adsageIDB.open(); } window.addEventListener("DOMContentLoaded", init, false); </ script > </ head > < body > < ul id = "todoItems" > </ ul > < input type = "text" id = "todo" name = "todo" placeholder = "adsageIDB text?" /> < input type = "submit" value = "增加一个 IDB" onclick = "addTodo(); return false;" /> </ body > </ html >以上这篇html5 初试 indexedDB(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
原文地址:http://www.cnblogs.com/androidshouce/archive/2016/07/21/5690444.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。