国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

html5 indexeddb的簡明api

luckyw / 1722人閱讀

摘要:網上搜來一堆,,幾乎沒有找到滿意的答案,經過匯總并結合自己的理解,封裝了一套簡單的是一個異步對象,必須使用回調函數方式進行調用打開一個數據庫,支持兩個參數,第二個參數指定版本號,我沒用到,讓瀏覽器自己創建版本號。

網上搜來一堆api,demo,幾乎沒有找到滿意的答案,經過匯總并結合自己的理解,封裝了一套簡單的api

// indexedDB是一個異步對象,必須使用回調函數方式進行調用

//打開一個數據庫,open支持兩個參數,第二個參數指定版本號,我沒用到,讓瀏覽器自己創建版本號。
var request = indexedDB.open("myDbName");
request.onsuccess = function(e) {
    //拿到db對象
    var db = e.target.result;
    
    
    //新增一個數據表:給數據表指定一個搜索的鍵值
    var store = db.createObjectStore("myTableName", {keyPath: "mykey"});
    
    
    // 創建數據庫事務(不是很理解事務二字),我理解的是:指定一個即將用來讀寫的數據
    //除了新建數據表都用這一行代碼 和上面的createObjectStore不能同時使用
    var transaction = db.transaction("myTableName", "readwrite").objectStore("myTableName");
    //到此,就可以進行數據庫的數據表操作了
    
    
    //以下四個方法不是同時使用的,是分別封裝在不同方法內的,這里為了演示,全部寫一起了
    
    //增:增加一條數據 add(anything)
    //一般情況下不用add,而是用put方法
    var result = store.add({name:"mykey",value:"test1"});
    
    //刪:刪除一條數據 delete(keyPath)
    var result = store.delete("mykey");
    
    //改:修改一條數據,一般情況下put使用比較多
    var result = store.put({name:"mykey",value:"test value"});
    
    //查:讀取一條數據
    var result = store.get("mykey");
    
    
    result.onsuccess = function(e) {
        //如果是get,這里就是讀取的數據
        var obj = e.target.result;
        success(obj);
    };
    result.onerror = function(e) {
    };
}
request.onerror = function() {
};

以下是我自己封裝好的方法:

var myDb = {
    options:{
        dbName:"myDbName",
        tbName:"myTableName",
        keyPath:"name",
    },
    getIndexedDB: function(name) {
        var that = this;
        return new Promise(function(success, error) {
            // 打開數據庫
            var request = indexedDB.open(that.options.dbName);
            request.onsuccess = function(e) {
                var database = e.target.result;
                // 操作數據表
                var store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName);
                var result = store.get(name);
                result.onsuccess = function(e) {
                    var obj = e.target.result;
                    success(obj);
                };
                result.onerror = function(e) {
                    error(obj);
                };
            }
            request.onerror = function() {
                error(event);
            };
            // 數據庫不存在時,或者版本號不一致時,就會執行這里
            request.onupgradeneeded = function(e) {
                e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath });
            };
        });
    },
    getIndexedDBAll: function() {
        var that = this;
        return new Promise(function(success, error) {
            // 打開數據庫
            var request = indexedDB.open(that.options.dbName);
            request.onsuccess = function(e) {
                var database = e.target.result;
                // 操作數據表
                var store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName);
                var cursorRequest = store.openCursor();
                var list = [];
                cursorRequest.onsuccess = function(event) {
                    var cursor = event.target.result;
                    if (cursor) {
                        var value = cursor.value;
                        list.push(value);
                        cursor.continue();
                    } else {
                        success(list);
                    }
                }
            }
            request.onerror = function() {
                error(event);
            };
            // 數據庫不存在時,或者版本號不一致時,就會執行這里
            request.onupgradeneeded = function(e) {
                e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath });
            };
        });
    },
    saveOneIndexedDB: function(keyValue) {
        var that = this;
        return new Promise(function(success, error) {
            // 打開數據庫
            var request = indexedDB.open(that.options.dbName);
            request.onsuccess = function(e) {
                var database = e.target.result;
                var store = null;
                store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName);
                var result = store.put(keyValue);
                result.onsuccess = function(event) {
                    success(keyValue);
                };
                result.onerror = function(event) {
                    error(event);
                };
            }
            request.onerror = function(event) {
                error(event)
            };
            // 數據庫不存在時,或者版本號不一致時,就會執行這里
            request.onupgradeneeded = function(e) {
                var store = e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath });
                var result = store.put(keyValue);
                result.onsuccess = function(event) {
                    success(keyValue);
                };
                result.onerror = function(event) {
                    error(event);
                };
            };
        });
    },
    saveListIndexedDB: function(list, back, error) {
        var that = this;
        return Promise.all(list.map(function(v) {
            return that.saveOneIndexedDB(v);
        }));
    },
    deleteDB: function(name) {
        var that = this;
        return new Promise(function(success, error) {
            // 打開數據庫
            var request = indexedDB.open(that.options.dbName);
            request.onsuccess = function(e) {
                var database = e.target.result;
                var store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName);
                var result = store.delete(name);
                result.onsuccess = function(event) {
                    success(name)
                };
                result.onerror = function(event) {
                    error(event)
                };
            }
            request.onerror = function(event) {
                error(event)
            }
            // 數據庫不存在時,或者版本號不一致時,就會執行這里
            request.onupgradeneeded = function(e) {
                e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath });
            };
        });
    }
};

測試一下:

//設置數據庫名稱和表名
myDb.options.dbName = "file_list";
myDb.options.tbName = "files";

//保存一條數據:
myDb.saveOneIndexedDB({
    name:"test",
    file:"123123",
}).then(function(file){
    /**file:{
        name:"test",
        file:"123123",
    }*/
});

//讀取數據
myDb.getIndexedDB("ex_zh.js").then(function(v){console.log(v)});

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97954.html

相關文章

  • 前端進階系列(三):HTML5新特性

    摘要:是對標準的第五次修訂。新特性語義特性賦予網頁更好的意義和結構文件類型聲明僅有一型。新的屬性用于與用于用于。索引數據庫從本質上說,允許用戶在瀏覽器中保存大量的數據。 HTML5 是對 HTML 標準的第五次修訂。其主要的目標是將互聯網語義化,以便更好地被人類和機器閱讀,并同時提供更好地支持各種媒體的嵌入。HTML5 的語法是向后兼容的?,F在國內普遍說的 H5 是包括了 CSS3,Java...

    spademan 評論0 收藏0
  • 前端進階系列(三):HTML5新特性

    摘要:是對標準的第五次修訂。新特性語義特性賦予網頁更好的意義和結構文件類型聲明僅有一型。新的屬性用于與用于用于。索引數據庫從本質上說,允許用戶在瀏覽器中保存大量的數據。 HTML5 是對 HTML 標準的第五次修訂。其主要的目標是將互聯網語義化,以便更好地被人類和機器閱讀,并同時提供更好地支持各種媒體的嵌入。HTML5 的語法是向后兼容的。現在國內普遍說的 H5 是包括了 CSS3,Java...

    luffyZh 評論0 收藏0
  • 前端進階系列(三):HTML5新特性

    摘要:是對標準的第五次修訂。新特性語義特性賦予網頁更好的意義和結構文件類型聲明僅有一型。新的屬性用于與用于用于。索引數據庫從本質上說,允許用戶在瀏覽器中保存大量的數據。 HTML5 是對 HTML 標準的第五次修訂。其主要的目標是將互聯網語義化,以便更好地被人類和機器閱讀,并同時提供更好地支持各種媒體的嵌入。HTML5 的語法是向后兼容的?,F在國內普遍說的 H5 是包括了 CSS3,Java...

    lemon 評論0 收藏0
  • IndexedDB--HTML5本地存儲

    摘要:相比更加高效,包括索引事務處理和查詢功能。在本地存儲中,存儲的數據是最多的,不像的,存儲空間是無上限且永久的。由于受到的推崇。存儲數據如果調用添加的數據與已存在的數據有相同的,瀏覽器會將新數據替換已存在的數據。 什么是IndexedDB indexedDB是一種輕量級NOSQL數據庫,是由瀏覽器自帶。相比Web Sql更加高效,包括索引、事務處理和查詢功能。在HTML5本地存儲中,In...

    explorer_ddf 評論0 收藏0

發表評論

0條評論

luckyw

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<