临时保存草稿功能,数据库这块一般怎么实现的?

scbb 2012-09-03 12:12:04
要求是用户不管填了什么,都把页面当成草稿保存下来。
由于书库那里有很多限制,比如只能数字,或者不能为空,或者长度限制。
所以不能把数据存在原来一样的table里。
并且要求草稿可以有多个,可以在以后的查询里找到继续填写。

现在考虑再建一个DB,(由于有很多种草稿,即很多种页面都需要草稿保存功能,所以没有在同一个库建很多类似的表,
而直接建个库)把table not null都去掉,都存文本。

问题是,我看很多blog也有草稿功能,当然也许他们的要求是填正确了才能存草稿。
我想问,这种需求一般怎么实现?? 如果没有固定模式,大家也可以帮我想想办法。

(其实我觉得这也许是个数据库的问题,但不知道放在哪个板块。。。)
...全文
1419 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
suncky 2014-02-22
  • 打赏
  • 举报
回复
哈哈,举一反三,还共享,谢啦
Go 旅城通票 2012-09-04
  • 打赏
  • 举报
回复
别人的blog一般是存储在客户端的吧,IE可以使用userData Behavior,其他浏览器可以使用Storage什么的,参考JavaScript本地存储

至于保存什么数据,你在保存之前验证下数据是否符合要求,符合就保存起来。最好以JSON格式保存,这样好操作

如表单里面有name="title",name="body",name="type"3个输入,title,body为字符串,type为数字。

1)在window.onbeforeunload中判断下内容,如果符合要求就保存为{title:"...",body:"...",type:"..."}这种格式的数据,然后存储
2)在window.onload中从存储中判断是否有草稿数据,有则从存储中获取草稿数据初始化表单
3)正常提交后清空存储数据


如果是保存到数据库,只需要2个字段,一个是存储url地址的,一个是存储此url地址对应的表单的json内容,格式如上面描述的
1)可以在window.onbeforeunload中ajax同步提交json数据和当前页面的url地址
2)window.onload中ajax发送当前url到动态页读取对应url存储,存在返回然后初始化表单
3)正常提交时清空数据库中对应的项目
scbb 2012-09-04
  • 打赏
  • 举报
回复
http://goro.iteye.com/blog/1671322
上面的连接不对,重发一下。
scbb 2012-09-04
  • 打赏
  • 举报
回复
非常感谢楼上给我了思路。
我参考了很多网站,弄了个更共通的例子。
不同的form也能用序列化和反序列化了。

放在下面的地址里了。
http://goro.iteye.com/admin/blogs/1671322
Go 旅城通票 2012-09-04
  • 打赏
  • 举报
回复
忘了一个很重要的数据库项,就是谁保存的,呵呵,那就是3个项目了【url,data,sendby

1)name不变就行,因为初始化通过遍历json的key来实现初始化表单,具体参考3)
2)通用的,最好一个url地址存一条记录,防止覆盖
3)给个简单的例子给你参考,不过onbeforeunload和onunload可能在一些非主流浏览器,如opera,safari之类的不支持,所以建议增加一个存为草稿的按钮,点击这个按钮才存草稿
<form method="post" action="x.html" name="frmPOST">
标题:<input type="text" name="title" /><br />
类型:<select name="type"><option value="">请选择...</option><option value="1">AJAX</option><option value="2">C#</option><option value="3">JAVA</option></select><br />
内容:<textarea name="content" cols="60" rows="5"></textarea><br />
<input type="submit" value="发表" /> <input type="button" value="存为草稿" onclick="save(this)" />
</form>
<script type="text/javascript">
function rep(v) { //替换操作,将"替换为实体",防止json格式错误
return v.replae(/"/g, '"');
}
function save(btn) {//保存草稿代码
var f = btn.form, r = '';
if (f.title.value != '') r = ',"title":"' + rep(f.title.value) + '"';
if (f.type.value != '') r = ',"type":"' + rep(f.type.value) + '"';
if (f.content.value != '') r = ',"content":"' + rep(f.content.value) + '"';
if (r != '') //有输入内容,发送ajax保存,纯ajax写法比较多内容,本示例使用jquery.ajax来实现
$.ajax({
url: '写数据库的URL地址'
, type: 'POST'
, dataType: 'JSON'
, data: 'url:' + encodeURIComponent(location.href) + '&data=' + encodeURIComponent('{' + r.substring(1) + '}')//////////注意这里,发送了2个键值对,url和data
, success: function (data) {//保存成功

}
, error: function (xhr) { alert('保存失败,服务器返回信息\n' + xhr.responseText); } //发生错误
});
}
function initForm() { //初始化表单
$.ajax({
url: '读数据库的URL地址'//负责从传递的url参数中读取数据库存储的data然后输出
, type: 'POST'
, dataType: 'JSON'
, data: 'url=' + encodeURIComponent(location.href)
, success: function (data) { //由于保存的是json格式的内容,所以指定dataType为json时jquery会自动将json格式的字符串转为json对象
var f = document.frmPOST; //获取表单
for (var key in data)
if (f[key]) f[key].value = data[key];//表单中存在名称和键一样的输入项,设置value值
}
, error: function (xhr) { alert('保存失败,服务器返回信息\n' + xhr.responseText); } //发生错误
});
}
window.onload = initForm;//onload中发送ajax请求,直接调用initForm()也行,但是这句代码一定要在form表单后面
</script>

scbb 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
别人的blog一般是存储在客户端的吧,IE可以使用userData Behavior,其他浏览器可以使用Storage什么的,参考JavaScript本地存储

至于保存什么数据,你在保存之前验证下数据是否符合要求,符合就保存起来。最好以JSON格式保存,这样好操作

如表单里面有name="title",name="body",name="type"3个输入,title,body为字符串……
[/Quote]

谢谢楼上的。
A客户端写的草稿,B客户端上也需要能修改的。所以估计要存数据库了。
根据您的回答,我还有3问题。

1)如果上线后,页面设计变了加了几个文本框后,以前存的草稿还能用吗?

2)
我有好多个不同类型的页面都需要草稿这个功能。
您这样做,页面生成json和从json设回页面这两个处理,共通吗?
还是要根据页面不同,写不同的方法??

3)
页面生成json和从json设回页面这两个处理,有例子吗?
或者我搜索什么关键字能找到我需要的呢?

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧