这次给大家带来h5的本地存储和本地数据库详细介绍,使用h5的本地存储和本地数据库的注意事项有哪些,下面就是实战案例,一起来看一下。
本地存储
1.1 本地存储由来的背景
由于html4时代cookie的大小、格式、存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于cookie。但是cookie的这些限制,也就导致了cookie只能存储一些id之类的标识符等简单的数据。
下面是cookie的限制:
大多数浏览器支持最大为 4096 字节的 cookie。
浏览器还限制站点可以在用户计算机上存储的 cookie 的数量。大多数浏览器只允许每个站点存储 20 个cookie;如果试图存储更多 cookie,则最旧的 cookie 便会被丢弃。
有些浏览器还会对它们将接受的来自所有站点的 cookie 总数作出绝对限制,通常为 300 个。
cookie默认情况都会随着http请求发送到后台服务器,但并不是所有请求都需要cookie的,比如:js、css、图片等请求则不需要cookie。
为了破解cookie的一系列限制,html5通过js的新的api就能直接存储大量的数据到客户端浏览器,而且支持复杂的本地数据库,让js更有效率。
html5支持两种的webstorage:
永久性的本地存储(localstorage)
会话级别的本地存储(sessionstorage)
1.2 永久性的本地存储:localstorage
在最新的js的api中增加了localstorage对象,便于用户存储永久存储的web端的数据。而且数据不会随着http请求发送到后台服务器,而且存储数据的大小基本不用考虑,因为在html5的标准中要求浏览器至少要支持到4mb.所以,这完全是颠覆了cookie的限制,为web应用在本地存储复杂的用户痕迹数据提供非常方便的技术支持。接下来就将介绍localstorage的常用的方法。
localstorage提供了四个方法来辅助我们进行对本地存储做相关操作。
setitem(key,value)添加本地存储数据。两个参数,非常简单就不说了。
getitem(key)通过key获取相应的value。
removeitem(key)通过key删除本地数据。
clear()清空数据。
代码如下:
<script type="text/javascript">
//添加key-value 数据到 sessionstorage
localstorage.setitem("demokey", "http://www.shiyanlou.com");
//通过key来获取value
var dt = localstorage.getitem("demokey");
alert(dt);
//清空所有的key-value数据。
//localstorage.clear();
alert(localstorage.length);
</script>
1.3 会话级别的本地存储:sessionstorage
在html5中增加了一个js对象:sessionstorage;通过此对象可以直接操作存储在浏览器中的会话级别的webstorage。存储在sessionstorage中的数据首先是key-value形式的,另外就是它跟浏览器当前会话相关,当会话结束后,数据会自动清除,跟未设置过期时间的cookie类似。
sessionstorage提供了四个方法来辅助我们进行对本地存储做相关操作。
setitem(key,value)添加本地存储数据。两个参数,非常简单就不说了。
getitem(key)通过key获取相应的value。
removeitem(key)通过key删除本地数据。
clear()清空数据。
代码如下:
<script type="text/javascript">
//添加key-value 数据到 sessionstorage
sessionstorage.setitem("demokey", "http://blog.itjeek.com");
//通过key来获取value
var dt = sessionstorage.getitem("demokey");
alert(dt);
//清空所有的key-value数据。
//sessionstorage.clear();
alert(sessionstorage.length);
</script>
1.4 强大的本地数据
虽然html5已经提供了功能强大的localstorage和sessionstorage,但是他们两个都只能提供存储简单数据结构的数据,对于复杂的web应用的数据却无能为力。逆天的是html5提供了一个浏览器端的数据库支持,允许我们直接通js的api在浏览器端创建一个本地的数据库,而且支持标准的sql的crud操作,让离线的web应用更加方便的存储结构化的数据。接下里介绍一下本地数据的相关api和用法。
操作本地数据库的最基本的步骤是:
第一步:opendatabase方法:创建一个访问数据库的对象。
第二步:使用第一步创建的数据库访问对象来执行transaction方法,通过此方法可以设置一个开启事务成功的事件响应方法,在事件响应方法中可以执行sql.
第三步:通过executesql方法执行查询,当然查询可以是:crud。
接下来分别介绍一下相关的方法的参数和用法。
1.4.1 opendatabase方法
//demo:获取或者创建一个数据库,如果数据库不存在那么创建之
var database = opendatabase(“student”, “1.0”, “学生表”, 1024 * 1024, function () { });
opendatabase方法打开一个已经存在的数据库,如果数据库不存在,它还可以创建数据库。几个参数意义分别是:
数据库名称。
数据库的版本号,目前来说传个1.0就可以了,当然可以不填;
对数据库的描述。
设置分配的数据库的大小(单位是kb)。
回调函数(可省略)。
初次调用时创建数据库,以后就是建立连接了。
1.4.2 db.transaction方法
可以设置一个回调函数,此函数可以接受一个参数就是我们开启的事务的对象。然后通过此对象可以执行sql脚本。
<head>
<script src="scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script type="text/javascript">
function initdatabase() {
var db = getcurrentdb();//初始化数据库
if(!db) {alert("您的浏览器不支持html5本地数据库");return;}
db.transaction(function (trans) {//启动一个事务,并设置回调函数
//执行创建表的sql脚本
trans.executesql("create table if not exists demo(uname text null,title text null,words text null)", [], function (trans, result) {
}, function (trans, message) {//消息的回调函数alert(message);});
}, function (trans, result) {
}, function (trans, message) {
});
}
$(function () {//页面加载完成后绑定页面按钮的点击事件
initdatabase();
$("#btnsave").click(function () {
var txtname = $("#txtname").val();
var txttitle = $("#txttitle").val();
var txtwords = $("#txtwords").val();
var db = getcurrentdb();
//执行sql脚本,插入数据
db.transaction(function (trans) {
trans.executesql("insert into demo(uname,title,words) values(?,?,?) ", [txtname, txttitle, txtwords], function (ts, data) {
}, function (ts, message) {
alert(message);
});
});
showallthedata();
});
});
function getcurrentdb() {
//打开数据库,或者直接连接数据库参数:数据库名称,版本,概述,大小
//如果数据库不存在那么创建之
var db = opendatabase("mydb", "1.0", "it's to save demo data!", 1024 * 1024); ;
return db;
}
//显示所有数据库中的数据到页面上去
function showallthedata() {
$("#tbldata").empty();
var db = getcurrentdb();
db.transaction(function (trans) {
trans.executesql("select * from demo ", [], function (ts, data) {
if (data) {
for (var i = 0; i < data.rows.length; i++) {
appenddatatotable(data.rows.item(i));//获取某行数据的json对象
}
}
}, function (ts, message) {alert(message);var tst = message;});
});
}
function appenddatatotable(data) {//将数据展示到表格里面
//uname,title,words
var txtname = data.uname;
var txttitle = data.title;
var words = data.words;
var strhtml = "";
strhtml += "<tr>";
strhtml += "<td>"+txtname+"</td>";
strhtml += "<td>" + txttitle + "</td>";
strhtml += "<td>" + words + "</td>";
strhtml += "</tr>";
$("#tbldata").append(strhtml);
}
</script>
</head>
<body>
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="txtname" id="txtname" required/></td>
</tr>
<tr>
<td>标题:</td>
<td><input type="text" name="txttitle" id="txttitle" required/></td>
</tr>
<tr>
<td>留言:</td>
<td><input type="text" name="txtwords" id="txtwords" required/></td>
</tr>
</table>
<input type="button" value="保存" id="btnsave"/>
<hr/>
<input type="button" value="展示所哟数据" onclick="showallthedata();"/>
<table id="tbldata">
</table>
</body>
</html>
相信看了这些案例你已经掌握了方法,更多精彩请关注其它相关文章!
相关阅读:
html的table鼠标拖拽排序该如何实现
html属于什么文件html的文件该如何打开
html怎样实现页面跳转时传递参数
以上就是h5的本地存储和本地数据库详细介绍的详细内容。