AJAX+JS 文章自动保存功能
分类:电脑知识 发表于:2011-05-23 10:38:18 评论(10)
编写文章时,突然不小心碰到了插头,或者突然的一个断电,让你辛辛苦苦,热情洋溢编写的文章,瞬间消失时,你会不会气得跳脚,有种要砸了电脑的冲动?
OK,本人非常明白你的感受,因为本人也是资深受害者。。。于是。。。今天。。。翻箱倒柜找出自动保存功能,让你无后顾之忧,继续洋洋洒洒。。。
首先是表单页面:
<!-- 编写文章的文本域 -->
<textarea cols="10" rows="6" id="content"></textarea>
<!-- AutoSaveMsg显示返回信息 -->
<div id="AutoSaveMsg"></div>
<input type="button" onclick="AutoSaveRestore();" value="恢复最后保存的草稿">
<!-- 将JS代码放在所有对象之后,以免在页面未加载完成时出现对象不存在的错误 -->
<!-- AJAX类 -->
<script type="text/javascript" src="ajaxrequest.js"></script>
<!-- 自动保存代码 -->
<script type="text/javascript" src="autosave.js"></script>
=====以下代码存成autosave.js=====
// 要保存的内容对象FormContent
var FormContent=document.getElementById("content");
// 显示返回信息的对象
var AutoSaveMsg=document.getElementById("AutoSaveMsg");
// 自动保存时间间隔
var AutoSaveTime=60000;
// 计时器对象
var AutoSaveTimer;
// 首先设置一次自动保存状态
SetAutoSave();
// 自动保存函数
function AutoSave()
{
// 如果内容为空,则不进行处理,直接返回
if(!FormContent.value) return;
// 创建AJAXRequest对象,
var ajaxobj=new AJAXRequest;
ajaxobj.url="inc/autosave.asp";
ajaxobj.content="postcontent="+escape(FormContent.value);
ajaxobj.callback=function(xmlObj)
{
// 显示反馈信息
AutoSaveMsg.innerHTML=xmlObj.responseText;
}
ajaxobj.send();
}
// 设置自动保存状态函数
function SetAutoSave()
{
AutoSaveTimer=setInterval("AutoSave()",AutoSaveTime);
}
// 恢复最后保存的草稿
function AutoSaveRestore()
{
// 创建AJAXRequest对象
var ajaxobj=new AJAXRequest;
AutoSaveMsg.innerHTML="正在恢复,请稍候……"
ajaxobj.url="inc/autosave.asp";
ajaxobj.content="action=restore";
ajaxobj.callback=function(xmlObj)
{
AutoSaveMsg.innerHTML="恢复最后保存成功";
// 如果内容为空则不改写textarea的内容
if(xmlObj.responseText!="")
{
// 恢复草稿
FormContent.value=xmlObj.responseText;
}
}
ajaxobj.send()
}
=====以下代码存成autosave.asp,经验证其中autosave.txt需要先建立=====
<%
Dim PostContent,action,objStream
´获取操作,是保存草稿还是恢复草稿
action=Request.Form("action")
´获取草稿内容
PostContent=Request.Form("postcontent")
IF action="restore" Then
Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Type = 2
.Mode = 3
.Open
.LoadFromFile(Server.MapPath("autosave.txt"))
.Charset = "utf-8"
´.Position = 0
PostContent = .ReadText()
.Close
End With
Set objStream = NoThing
´输出草稿
IF PostContent<>"" Then Response.Write(PostContent)
Else
´保存草稿,如果草稿内容不为空则进行保存操作
IF PostContent<>Empty Then
Set objStream = Server.CreateObject("ADODB.Stream")
With objStream
.Type = 2
.Mode = 3
.Open
.Charset = "utf-8"
.Position = objStream.Size
.WriteText= PostContent
.SaveToFile Server.MapPath("autosave.txt"),2
.Close
End With
Set objStream = NoThing
´´输出保存是否成功信息
If Err.Number=0 then
Response.Write("<font style=""font-size:12px;color:green;"">"&Now()&" AutoSave success!</font>")
Else
Response.Write("<font style=""font-size:12px;color:red;"">"&Now()&" Auto-Save failed,errorNo:"&Err.Number&",error message:"&Err.Dscription&"</font>")
End If
End IF
End IF
%>
=====以下代码存成ajaxrequest.js=====
function AJAXRequest() {
var xmlObj = false;
var CBfunc,ObjSelf;
ObjSelf=this;
try { xmlObj=new XMLHttpRequest; }
catch(e) {
try { xmlObj=new ActiveXObject("MSXML2.XMLHTTP"); }
catch(e2) {
try { xmlObj=new ActiveXObject("Microsoft.XMLHTTP"); }
catch(e3) { xmlObj=false; }
}
}
if (!xmlObj) return false;
this.method="POST";
this.url;
this.async=true;
this.content="";
this.callback=function(cbobj) {return;}
this.send=function() {
if(!this.method||!this.url||!this.async) return false;
xmlObj.open (this.method, this.url, this.async);
if(this.method=="POST") xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlObj.onreadystatechange=function() {
if(xmlObj.readyState==4) {
if(xmlObj.status==200) {
ObjSelf.callback(xmlObj);
}
}
}
if(this.method=="POST") xmlObj.send(this.content);
else xmlObj.send(null);
}
}
经验证,其中恢复草稿可能会有乱码问题,本人尚未彻底解决,只能直接调用打开autosave.txt来获得草稿。其他的留待大家解决吧。。。有结果的别忘告诉我。。。