<!DOCTYPE html>
<html>
<head>
<title>Zipcode Database</title>
<script>
// IndexedDB的实现仍然使用API前缀
var indexedDB = window.indexedDB || //使用标准的DB API
window.mozIndexedDB; //或者Firefox早期版本的IndexedDB
window.webkitIndexedDB; //或者Chrome的早期版本
//这两个API, Firefox没有前缀
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var IDBKeyRange = window.IDBKeyRangeI || window.webkitIDBKeyRange;
//使用此函数,以日志的形式记录发生的数据库错误
function logerr(e) {
console.log("IndexedDB eIror" + e.code + ":" + e.message);
//此函数异步地获取数据库对象(需要的时候,用于创建和初始化数据库) ,
//然后将其传递给f()函数
function withDB(f) {
var request = indexedDB.open(" zipcodes"); //获取存储邮政编码的数据库
request.onerror = logerr; //以日志的方式记录发生的错误
request.onsuccess = function () { //或者完成的时候调用此回调函数
var db = request.result; //request对象的result值就表示该数据库
//即便该数据库不存在,也总能够打开它
//通过检查版本号来确定数据库是否已经创建或者初始化
//如果还没有,就做相应的创建或者初始化的工作
//如果db已经存在了,那么只需要将它传递给回调函数f()就可以了
if (db.version === "1") f(db); //如果db已经初始化了,就直接将它传递给f()函数
else initdb(db, f); //否则,先初始化db
}
}
// 给定一个邮政编码,查询该邮政编码属于哪个城市,
//并将该城市名异步传递给指定的回调函数
function lookupCity(zip, callback) {
withDB(function (db) {
//为本次查询创建一个事务对象
var transaction = db.transaction(["zipcodes"], // 所需的对象存储区
IDBTransaction.READ_ONLY, //没有更新
0); //没有超时
//从事务中获取对象存储区
var objects = transaction.objectStore("zipcodes");
//查询和指定的邮政编码的键匹配的对象
// 上述代码是同步的,但是这里的是异步的
var request = objects.get(zip);
request.onerror = logerr; //以日志形式记录发生的错误
request.onsuccess = function () { //将结果传递给此函数
// result对象 可以通过request. result属性获取
var object = request.result;
if (object) // 如果查询到了,就将城市和州名传递给回调函数
callback(object.ci
用ES6语法存储美国邮政编码的IndexedDB数据库
最新推荐文章于 2020-12-31 21:47:13 发布